c - isdigit() 返回错误结果?

标签 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没有被检测为数字, 那怎么了?以及如何解决问题? 谢谢。

最佳答案

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

要么使用 strlen 获取字符串的长度,要么使用数组代替指针。

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

const char *tt = "22";

关于c - isdigit() 返回错误结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22427264/

相关文章:

c - 不打印C中的Inode文件名或头信息

c - 任何类型的一般排序,与结构作斗争

c++ - C/C++ 为什么对二进制数据使用 unsigned char?

c++ - 如何使用 LD_PRELOAD 拦截 dlsym 调用?

c - undefined variable 和编译器优化

c - 在c中打印新的字符数组(奇怪的符号)

c - 为什么我不能在 for 循环中使用 x + 1?

c - 找出数字的总和

c - 在c中实现维特比算法哪种更好?

c - 在 strtok 之后将 arg 传递给 execl