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

C语言实现句子单词逆序输出时出现未知乱码字符如何解决

乱码原因
  • C 语言的字符串要求必须以\0(空终止符)作为结束标记,你使用printf("%s")输出单词时,程序会从给定的首地址一直向后读取内存,直到碰到\0才会停止输出。你的代码中没有给每个存入output数组的单词末尾添加\0,未初始化的内存中存储的随机值就会被当成字符串的一部分输出,表现为乱码字符。
  • 另外你只在碰到空格时切换单词,最后一个单词结尾没有空格,不会触发空格分支的处理,也没有补终止符的操作,所以最后一个单词(逆序后第一个输出的单词)的乱码问题通常最明显。
修复方法

只需要补充两个位置的\0添加逻辑即可:

  1. 碰到空格切换单词前,给当前已写完的单词末尾加\0
  2. 整个输入遍历完成后,给最后一个单词末尾加\0

修改后的完整代码如下:

#include <stdio.h>
#include <string.h>
int main(){
    int word=0,character=0;
    char input[50];
    char output[50][50] = {0}; // 可选:初始化数组为0,减少异常风险
    int InLength;
    printf("Enter some words:\n");
    fgets(input,50,stdin);
    input[strcspn(input, "\n")] = 0;
    InLength=strlen(input);
    for (int i=0;i<InLength;i++){
        if (input[i]==' '){
            output[word][character] = '\0'; // 给当前单词加终止符
            character=0;
            word++;
        }
        else{
            output[word][character]=input[i];
            character++;
        }
    }
    output[word][character] = '\0'; // 给最后一个单词加终止符
    for (word;word>=0;word--){
        printf("%s ",output[word]);
    }
    printf("\n");
    return 0;
}
可选优化

你当前的输出逻辑会在整句末尾多输出一个空格,如果要去掉这个多余空格,可以调整输出逻辑:先输出第一个单词,再依次输出空格加后续单词即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:54:07