如何输入‘end’终止程序?C语言字符串反转循环问题求助
问题分析与修正方案
你的代码存在三个核心问题,导致无法正常终止循环,还存在内存溢出风险:
字符串比较逻辑错误:C语言里
str != "end"是在比较两个字符串的内存地址,而非内容是否相同。要判断字符串内容一致,必须用strcmp函数(需包含<string.h>头文件),当strcmp(str, "end") == 0时,代表两个字符串内容完全匹配。字符数组内存不足:
char str[]=""定义的数组长度仅为1,只能存空终止符\0,输入任何非空字符串都会触发缓冲区溢出,引发未定义行为。需要给数组分配足够空间,比如char str[100]。循环顺序不合理:当前循环会先判断初始空字符串,再执行输入、反转操作——即使用户输入"end",也会先把"end"反转输出,再进行循环判断。应该调整为先输入,再判断是否终止,最后执行反转。
另外,reverse函数里用到了strlen,必须包含<string.h>头文件,否则可能编译报错或出现异常行为。
修正后的完整代码
#include <stdio.h> #include <stdlib.h> #include <string.h> // 引入strcmp、strlen所需头文件 void reverse(char str[]) { int length = strlen(str); for (int i = length - 1; i >= 0; i--) { printf("%c", str[i]); } printf("\n"); // 反转后换行,输出更整洁 } int main(void) { char str[100]; // 分配足够内存,避免溢出 while (1) { printf("Enter string: "); scanf("%s", str); // 先判断是否为终止指令,是则直接退出循环 if (strcmp(str, "end") == 0) { break; } reverse(str); } return 0; }
关键修正说明
- 用
strcmp(str, "end") == 0替代str != "end",实现字符串内容的正确比较。 - 将
char str[]=""改为char str[100],确保有足够空间存储输入的字符串。 - 调整循环流程:先输入字符串,判断是否触发终止条件,再执行反转操作,避免无效输出。
- 补充
<string.h>头文件,保证strlen和strcmp函数正常运行。 - 在
reverse函数末尾添加换行,优化输出格式。
内容的提问来源于stack exchange,提问作者Stuywesant
相关产品推荐
相关产品推荐

