新手求助:这段计算字符串长度的C语言代码为何无法正常运行?
代码无法运行的原因及修复方案
你的代码存在几个关键问题,会导致程序运行异常或不符合预期:
- 变量
i未初始化:你只声明了int i, cnt =0;,但i的初始值是随机的垃圾值,直接用ptr[i]会访问字符串数组以外的内存区域,触发未定义行为(比如程序崩溃、输出乱码)。 - 终止条件类型不匹配:字符串的结束标记是字符类型的
'\0',但你用了指针类型的NULL——虽然二者在数值上可能都是0,但逻辑上属于错误的类型混用,编译器大概率会抛出警告。 main函数缺少返回值:标准C语言要求main函数必须返回一个int类型的值,你的代码末尾没有return语句,不符合规范,部分严格的编译器会报错。
修复后的代码示例
#include <stdio.h> int main() { char * ptr = "hello"; int i = 0, cnt =0; // 初始化i为0,从字符串首字符开始遍历 while(ptr[i] != '\0') // 使用正确的字符串结束符判断 { i++; cnt++; } printf("字符串长度:%d\n", cnt); // 打印结果验证 return 0; // 符合标准的返回值 }
更简洁的写法(直接遍历指针)
#include <stdio.h> int main() { char * ptr = "hello"; int cnt =0; while(*ptr != '\0') // 直接取当前指针指向的字符 { cnt++; ptr++; // 指针向后移动一位 } printf("字符串长度:%d\n", cnt); return 0; }
内容的提问来源于stack exchange,提问作者Vin37
相关产品推荐
相关产品推荐

