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

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的异常输出。

解决方案

有两种简单的修复方式:

  1. 手动指定足够的数组长度:给SPU4分配4个字节,留出存储结束符的空间
char SPU4[4] = "N/A";
  1. 让编译器自动计算数组大小:省略数组长度,编译器会自动根据字符串内容(包含结束符)分配足够的空间
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:37:10