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

C语言不使用<string.h>反转字符串输出多余字符如何解决

问题根源

C语言的字符串以空字符\0作为结束标识,printf("%s")输出字符串时,会从传入的首地址开始持续读取字符,直到遇到\0才终止。你的代码仅将原字符串的字符逐个反转赋值给c3,没有在c3的末尾手动添加\0,输出时就会读取c3数组边界外的内存内容,直到碰到内存中随机存在的\0才会停止,因此会出现超出预期长度的乱码字符。

其他代码问题修正
  • 禁止使用gets()函数:该函数不校验输入长度,极易造成缓冲区溢出,已经从C11标准中正式移除,建议替换为fgets()控制输入长度
  • fflush(stdin)属于未定义行为:C标准仅规定fflush()对输出流的刷新效果,对输入流使用fflush()的结果取决于编译器实现,不具备跨平台兼容性
修复后可运行代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char c1[10];
    char c3[10];
    int i,j,l;

    printf("输入要反转的字符串:\n");
    // 用fgets替代gets,指定最大输入长度避免溢出
    fgets(c1, sizeof(c1), stdin);
    // 移除fgets读取到的末尾换行符
    for(i = 0; c1[i] != '\0' && c1[i] != '\n'; i++);
    c1[i] = '\0';

    // 计算原字符串长度
    for(i = 0; c1[i] != '\0'; i++);
    l = i;
    j = 0;

    // 反转字符赋值
    for(i = l-1; i >= 0; i--)
    {
        printf("%d %d\n", i, j);
        c3[j] = c1[i];
        j++;
    }
    // 为反转后的字符串添加结束标记,是解决输出超长的核心步骤
    c3[j] = '\0';
    
    printf("反转结果:%s", c3);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:06:02