我总是使用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未被检测为数字, 怎么了?以及如何解决这个问题? 感谢。
答案 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");
}
你可能事先已经明白了什么是错误的。