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
相关产品推荐
相关产品推荐

