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

如何用C语言实现单词反转输出?现有代码输出乱码求助

问题分析与解决

你的代码出现随机字符的原因是数组越界访问:

  • 你定义的char word[10]数组下标范围是0到9,但循环从i=10开始,这已经超出了数组的合法访问范围,此时读取的是内存中未初始化的随机值,所以会先输出一堆乱码。
  • 另外,你直接从数组末尾倒着遍历,不管实际输入的单词长度,就算没越界,也会遍历到数组中未被输入字符填充的位置(这些位置的值也是随机的,除非刚好是0)。

修正方案

方法1:先获取单词长度,从最后一个有效字符开始遍历

利用strlen()函数获取字符串长度(需要包含<string.h>头文件),然后从长度减1的位置开始倒序输出到0:

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

int main(){
    char word[10];
    printf("Please enter a word : ");
    scanf("%9s", word); // 限制输入长度,避免缓冲区溢出

    // 获取字符串长度,strlen返回有效字符数,最后一个字符下标是len-1
    int len = strlen(word);
    for (int i = len - 1; i >= 0; i--){
        printf("%c", word[i]);
    }
    printf("\n"); // 输出换行让结果更整洁
    return 0;
}

方法2:找到字符串结束符的位置,从它的前一位开始倒序

不需要额外头文件,遍历找到'\0'的位置,再向前倒着输出:

#include <stdio.h>

int main(){
    char word[10];
    printf("Please enter a word : ");
    scanf("%9s", word); // 限制输入长度,避免缓冲区溢出

    int i = 0;
    // 先找到字符串结束符的位置
    while (word[i] != '\0') {
        i++;
    }
    // 从结束符前一位开始倒序输出
    for (i = i - 1; i >= 0; i--){
        printf("%c", word[i]);
    }
    printf("\n");
    return 0;
}

额外注意事项

  • 原代码中scanf("%s", word)没有限制输入长度,若用户输入超过9个字符(数组共10位,最后一位要存字符串结束符'\0'),会导致缓冲区溢出,所以改成scanf("%9s", word),限制最多读取9个字符,避免越界风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:30:58