将字符串打印的while循环改为for循环后无输出,求错误原因
指针遍历字符串的for循环错误分析
原正确的while循环示例
char *strPtr = "HelloWorld"; // 用于遍历字符串的临时指针 char *temp = strPtr; while (*temp != '\0') { printf("%c", *temp); temp++; }
你的无输出for循环代码
char *name = "SAMPLE NAME"; int i; for (i = 0; name[i] != '\0'; i++) { printf("%c", *name); }
错误原因及修正
- 输出字符未随迭代更新:你在
printf里写的*name,永远只会取字符串的第一个字符(也就是'S'),并不会随着循环变量i的增长指向后续字符。要获取当前循环位置的字符,应该用name[i]或者*(name + i)。 - 输出缓冲区未刷新(可能导致看不到输出):因为你只输出单个字符,没有换行符,标准输出的行缓冲机制会把内容暂存在缓冲区里,可能直到程序结束才会显示。可以在循环结束后加一行
printf("\n");来强制刷新。
修正后的代码
char *name = "SAMPLE NAME"; int i; for (i = 0; name[i] != '\0'; i++) { printf("%c", name[i]); // 取当前循环位置的字符 } printf("\n"); // 换行刷新缓冲区
如果想用更贴合指针概念的写法,也可以这样写for循环:
char *name = "SAMPLE NAME"; for (char *temp = name; *temp != '\0'; temp++) { printf("%c", *temp); } printf("\n");
内容的提问来源于stack exchange,提问作者user19538954
相关产品推荐
相关产品推荐

