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

C语言打印复制字符串出现多余字符的原因咨询

代码输出异常原因分析

先看你提供的代码:

#include<stdio.h>
int main()
{
    char main[]="Structured Programming";
    char copy[30];
    for (int i = 0; main[i] !='\0' ; i++)
    {
        copy[i]=main[i];
    }
    printf("%s",copy);
}

核心问题:缺少字符串终止符

printf("%s") 输出字符串的逻辑是:从指定地址开始读取字符,直到碰到'\0'(空字符)才停止。你的代码只把main里的有效字符复制到了copy数组,但没有手动给copy添加终止符'\0'。

不同环境表现差异的原因

  • 在线编译器:栈上的copy数组未初始化区域恰好自带'\0',刚好在复制的有效字符之后,所以printf能正常停止输出。
  • 本地IDE:栈上copy的未初始化区域是随机的垃圾值,有效字符后面没有'\0',printf就会继续读取内存,直到碰到某个位置的'\0',中间就会带出额外的随机字符(比如你看到的a)。

修复方法

循环结束后给copy加上终止符即可:

for (int i = 0; main[i] !='\0' ; i++)
{
    copy[i]=main[i];
}
copy[i] = '\0'; // 添加这行代码

另外补充:把数组命名为main虽然语法合法,但会和程序入口函数main()重名,属于不良编码习惯,建议改成其他名称(比如src_str)。

内容的提问来源于stack exchange,提问作者Rifat Ahmed Tusher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:50:23