printf数据丢失。。。。。。。。。。。。。。。

bad-Lz 2016-07-07 12:42:40
int main()
{
char a[2],b[2];

strcpy(a,"00");
strcpy(b,"00");
printf("%s------%s\n",a,b);

return 0;
}

输出结果:------00

请问,a的值哪去了?
...全文
277 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bad-Lz 2016-07-08
  • 打赏
  • 举报
回复
多谢各位!为了防止意外,我给指针申请空间后再用了,发现效果还是大大滴,不过就是有点麻烦,每次都要释放
jianyue--- 2016-07-07
  • 打赏
  • 举报
回复
printf("%s------%s\n",a,b); 参数a,b用错,要求使用字符串指针,程序中的a,b 已经不是字符串了
赵4老师 2016-07-07
  • 打赏
  • 举报
回复
摒弃strcpy;使用strncpy!
paschen 2016-07-07
  • 打赏
  • 举报
回复
可这样改:

int main()
{
	char a[10] = {0}, b[10] = {0};

	strcpy(a,"00");
	strcpy(b,"00");
	printf("%s------%s\n",a,b);

	return 0;
}
paschen 2016-07-07
  • 打赏
  • 举报
回复
strcpy的时候越界了,而且字符数组需要以\0结尾才算是字符串
小灸舞 版主 2016-07-07
  • 打赏
  • 举报
回复
字符串需要多一个'\0'
要特别注意需要的空间是字符串长度的大小+1
楼主这个a之所以没有输出,我猜是因为你的a和b分配的空间是连续的,而且b在a分配的前面
所以strcpy(b,"00"); 会使得最后的'\0'越界写入到a数组的第一个字符上
所以printf的时候a数组才会输出空(楼主只要%p打印一下a,b的首地址就知道了)
jianyue--- 2016-07-07
  • 打赏
  • 举报
回复
改成指针并不能解决问题,问题 strcpy(a,"00"); ,"00"是占用3个字节,a只有两个字节空间,溢出。由此造成printf("%s------%s\n",a,b); 函数调用时发生问题。解决办法,申请足够空间,比如 char a[3],b[3];
紫藤Teng 2016-07-07
  • 打赏
  • 举报
回复
‘\0’没有,所以输出的不是字符串
bad-Lz 2016-07-07
  • 打赏
  • 举报
回复
改成指针好了 !但是数组名不就是指针嘛

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧