Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C isdigit()返回错误结果?_C - Fatal编程技术网

C isdigit()返回错误结果?

C isdigit()返回错误结果?,c,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)/s

我总是使用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");
}
void testdigi(){
char*tt=“22”;
char*tt2=“22222”;

对于(int i=0;i您的问题是,您认为指针上的
sizeof
给出了指针指向的大小。提示:它给出了指针的大小(在32位机器上通常为4字节,在64位机器上为8字节)

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

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

const char *tt = "22";

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

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

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

const char *tt = "22";

为了进行调试,您应该对代码进行如下修改:

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");
}
void testdigi(){
char*tt=“22”;
char*tt2=“22222”;

对于(int i=0;i对于调试,您应该这样修改代码:

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");
}
void testdigi(){
char*tt=“22”;
char*tt2=“22222”;

对于(int i=0;iUse
strlen()
,而不是
sizeof()
sizeof(tt)
sizeof(char*)
,可能是4或8(取决于您的平台)。
sizeof(tt)
指针的大小(指向char)。您正在超越第一个数组。不需要将标题标记为已解决。只需单击复选标记来标记您选择的答案,就知道此问题已“解决”。此外,您似乎混合了您的词汇表。如果某个内容被称为“数字”,则表示该内容可以有两种状态:打开或关闭。单词“数字”(如数字中的数字或手上的数字(手指))和“数字”的含义不同。使用
strlen()
,而不是
sizeof()
sizeof(tt)
sizeof(char*)
,可能是4或8(取决于您的平台)。
sizeof(tt)
指针的大小(到char)。您正在超越第一个数组。不需要将标题标记为已解决。只需单击复选标记来标记您选择的答案,就知道此问题已“解决”。此外,您似乎混合了您的词汇。如果某个内容被称为“数字”,则意味着该内容可以有两种状态之一:打开或关闭。单词““数字”(如数字中的数字,或手(手指)上的数字)和“数字”的含义不同。