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

C语言字符串反转代码异常问题:输入少于4个字符时出现额外字符

问题分析与修复方案

你遇到的问题核心在于C语言的字符串必须以'\0'(空字符)作为结束标志,而你的代码里没有给反转后的rev数组添加这个结束符。当字符串长度较短时,rev数组后续的内存区域可能恰好有随机的垃圾字符,就会被printf当成字符串的一部分输出;而当字符串较长时,可能刚好内存里的内容凑巧是'\0',所以看起来正常,但这其实是偶然的情况。

具体修复步骤:

  • 在完成反转循环后,需要手动给rev数组的末尾添加'\0',位置就是rev[count] = '\0';(因为反转后的字符串长度和原字符串一样,都是count)

修复后的完整代码:

#include <stdio.h>
int main() { // 注意:main函数标准返回类型是int,不是void
    char str[1000], rev[1000];
    int i, j, count = 0;
    printf("Enter the string :");
    scanf("%s", str);
    printf("\nString Before Reverse: %s", str);
    
    // 计算字符串长度
    while (str[count] != '\0') {
        count++;
    }
    
    j = count - 1;
    for (i = 0; i < count; i++) {
        rev[i] = str[j];
        j--;
    }
    rev[count] = '\0'; // 关键:添加字符串结束符
    printf("\nString After Reverse: %s", rev);
    
    return 0; // 对应int main的返回值
}

额外优化提示:

  • 标准C语言中main函数的返回类型应该是int,而不是void,最后加上return 0;更规范。
  • 如果输入的字符串包含空格,scanf("%s", str)会读取到空格为止,如果你需要支持带空格的字符串,可以改用fgets(str, sizeof(str), stdin),不过要注意处理fgets会读取换行符的问题。

内容的提问来源于stack exchange,提问作者assassin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 21:48:14