int main () {
char str1[121];
char str2[4];
unsigned char x=255;
unsigned char y=2;
memset(str1, 0, 121);
memset(str2, 0, 4);
strncpy(str2, "jyot",4);
sprintf(str1,"%d-%d-%s", x,y,str2);
printf("%s",str1);
return(0);
}
为什么打印255-2-jyot-255-2?写入最后一个char数组后,sprintf是否应该自动不追加空字符?
答案 0 :(得分:2)
您很幸运,计算机在必须运行此代码时没有爆炸。
此程序是一个庞大的UB。您的str2
太短。即使您复制(仅使用strncpy
4个char
,数组也没有足够的空间容纳尾随零,并且strncpy
也不会复制最后一个零。
将其更改为:
char str2[5];
strcpy(str2, "jyot");
并删除memset
呼叫,因为此处不需要。
不要忽略警告!!!!并使用更现代的标准进行编译,该标准不允许调用没有原型的函数