printf数据丢失

C语言 码拜 9年前 (2016-04-03) 1134次浏览
int main()
{
char a[2],b[2];
strcpy(a,”00″);
strcpy(b,”00″);
printf(“%s–%s\n”,a,b);

return 0;
}
输出结果:–00
问一下,a的值哪去了?

解决方案

2

printf(“%s–%s\n”,a,b); 参数a,b用错,要求使用字符串指针,程序中的a,b 已经不是字符串了

20

改成指针并不能解决问题,问题  strcpy(a,”00″); ,”00″是占用3个字节,a只有两个字节空间,溢出。由此造成printf(“%s–%s\n”,a,b); 函数调用时发生问题。解决办法,申请足够空间,例如 char a[3],b[3];

40

字符串需要多一个”\0″
要特别注意需要的空间是字符串长度的大小+1
题主这个a之所以没有输出,本人猜是原因是你的a和b分配的空间是连续的,而且b在a分配的前面
所以strcpy(b,”00″); 会使得最后的”\0″越界写入到a数组的第一个字符上
所以printf的时候a数组才会输出空(题主只要%p打印一下a,b的首地址就知道了)

4

strcpy的时候越界了,而且字符数组需要以\0结尾才算是字符串

4

可这样改:

int main()
{
	char a[10] = {0}, b[10] = {0};
	strcpy(a,"00");
	strcpy(b,"00");
	printf("%s--%s\n",a,b);
	return 0;
}

2

摒弃strcpy;使用strncpy!

2

‘\0’没有,所以输出的不是字符串

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明printf数据丢失
喜欢 (0)
[1034331897@qq.com]
分享 (0)