isdigit()返回false结果?

时间:2014-03-15 17:29:33

标签: c

我总是使用isdigit()函数获取长度为2的任何数字字符串,这是代码:

void testdigi(){
    char* tt="22";
    char* tt2= "222222222";
    for(int i=0;i<sizeof(tt)/sizeof(char);i++)
        if (!isdigit(tt[i])) printf("22 not digital\n");
    for(int i=0;i<sizeof(tt2)/sizeof(char);i++)
        if (!isdigit(tt2[i])) printf("222222222 not digital\n");
}

我不知道为什么22未被检测为数字, 怎么了?以及如何解决这个问题? 感谢。

2 个答案:

答案 0 :(得分:4)

你的问题是你认为指针上的sizeof给出了它所指向的大小。提示:它为您提供指针的大小(在32位计算机上通常为4个字节,在64位计算机上为8个字节)。

使用strlen来获取字符串的长度,或使用数组而不是指针。

此外,即使您使用指针,您也必须记住它们指向常量字符串,因此正确的定义就是例如。

const char *tt = "22";

答案 1 :(得分:0)

对于调试,你应该像这样修改你的代码:

void testdigi(){
    char* tt="22";
    char* tt2= "222222222";
    for(int i=0;i<sizeof(tt)/sizeof(char);i++)
        if (!isdigit(tt[i])) printf("22 not digital\n");
        else printf("22 is digital\n");
    for(int i=0;i<sizeof(tt2)/sizeof(char);i++)
        if (!isdigit(tt2[i])) printf("222222222 not digital\n");
        else printf("222222222 is digital\n");
}

你可能事先已经明白了什么是错误的。