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

C语言反向拷贝字符串出现乱码及程序无法运行如何解决?

C语言字符串反向拷贝问题修复方案

问题1:输出带乱码的根因

  • C语言字符串必须以\0作为结束标志,你完成反向拷贝后没有给copy数组手动添加结束符,printf用%s输出时会连续读取内存数据直到遇到\0,超出copy有效内容的内存垃圾数据就会显示为乱码。
  • 你当前的长度计算逻辑可以运行,但存在冗余,length和length2两个变量完全可以合并简化。

问题2:定义char copy[length2]后无法运行的根因

  • 这种用变量定义数组长度的语法叫变长数组(VLA),仅在C99及更高标准中支持,如果你使用的编译器默认遵循C89标准,会直接编译失败无法生成可执行程序。
  • 就算编译器支持C99,变长数组分配在栈空间,也存在栈溢出风险,更推荐用固定长度数组或者动态内存分配实现。

修复后的可运行代码

#include <stdio.h>
#include <string.h>
#define ARR_SIZE 50

int main()
{
    char string[ARR_SIZE];
    printf("Enter char array!\n");
    fgets(string, ARR_SIZE, stdin);

    // 替换fgets读取的末尾换行符为结束符
    string[strlen(string) - 1] = '\0';
    int len = strlen(string);
    printf("%s\t%d\n", string, len - 1);

    for (int i = 0; i < len; i++)
    {
        printf("INDEX = %d   CHAR = %c\n", i, string[i]);
    }
    
    char copy[ARR_SIZE];
    for (int i = 0; i < len; i++)
    {
        copy[i] = string[len - 1 - i];
    }
    // 必须手动添加字符串结束符
    copy[len] = '\0';

    printf("\n反向拷贝结果:%s", copy);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:06:09