C语言打印两个字符串出现异常拼接结果,求原因解析
解决C语言字符串打印时意外拼接的问题
问题原因
你代码里的char SPU4[3] = "N/A";是核心问题:
- C语言的字符串必须以**空字符
'\0'**作为结束标志,printf这类函数靠它判断字符串的结束位置。 "N/A"包含3个可见字符,但算上结束符一共需要4个字节的存储空间。你手动指定了数组长度为3,刚好只能放下3个字符,没有多余空间存储'\0'。- 当
printf打印SPU4时,会越过数组边界继续读取内存,直到找到第一个'\0'。而EU4数组刚好在内存中紧跟SPU4,所以会把EU4的内容也一并打印出来,就出现了N/Aok的异常输出。
解决方案
有两种简单的修复方式:
- 手动指定足够的数组长度:给SPU4分配4个字节,留出存储结束符的空间
char SPU4[4] = "N/A";
- 让编译器自动计算数组大小:省略数组长度,编译器会自动根据字符串内容(包含结束符)分配足够的空间
char SPU4[] = "N/A";
修复后的完整代码
#include <stdio.h> int main(){ char SPU4[]= "N/A"; char EU4[]= "ok"; printf ("%s\n", SPU4); printf ("%s\n", EU4); }
运行后就能得到你期望的输出:
N/A ok
内容的提问来源于stack exchange,提问作者Sebastian Hernandez
相关产品推荐
相关产品推荐

