You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何输入‘end’终止程序?C语言字符串反转循环问题求助

问题分析与修正方案

你的代码存在三个核心问题,导致无法正常终止循环,还存在内存溢出风险:

  1. 字符串比较逻辑错误:C语言里str != "end"是在比较两个字符串的内存地址,而非内容是否相同。要判断字符串内容一致,必须用strcmp函数(需包含<string.h>头文件),当strcmp(str, "end") == 0时,代表两个字符串内容完全匹配。

  2. 字符数组内存不足:char str[]=""定义的数组长度仅为1,只能存空终止符\0,输入任何非空字符串都会触发缓冲区溢出,引发未定义行为。需要给数组分配足够空间,比如char str[100]。

  3. 循环顺序不合理:当前循环会先判断初始空字符串,再执行输入、反转操作——即使用户输入"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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:45:36