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

C语言反转字符串输出随机乱码、每次运行结果不一致如何修复?

问题原因

  • 反转后的字符数组rev没有手动添加C字符串必需的结束标志\0,printf用%s输出时会持续读取后续栈内存的随机垃圾值,直到遇到内存中随机存在的\0才停止,因此会出现乱码,且每次运行时栈内存的随机值不同,输出结果也不一样。
  • fgets读取输入时会将末尾的换行符\n一同存入数组,当前逻辑会将换行符也参与反转,会导致输出结果开头或末尾多出无效换行。

修复代码

#include <stdio.h>
#include <string.h>

#define LEN 20

void reverse(char w[LEN]);

int main() {
    char word[LEN];
    reverse(word);
    return 0;
}

void reverse(char w[LEN]) {
    char rev[LEN];
    int i, j, len;
    fgets(w, LEN, stdin);

    // 移除fgets读入的末尾换行符
    len = strlen(w);
    if (w[len - 1] == '\n') {
        w[len - 1] = '\0';
        len--;
    }

    // 反转逻辑
    for (i = 0, j = len - 1; i < len; i++, j--) {
        rev[j] = w[i];
    }
    // 手动添加字符串结束符
    rev[len] = '\0';

    printf("%s\n", rev);
    return;
}

验证效果

输入bathroom时,输出固定为moorhtab,无乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:06:04