int main()
{
char a[2],b[2];
strcpy(a,”00″);
strcpy(b,”00″);
printf(“%s–%s\n”,a,b);
{
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的首地址就知道了)
要特别注意需要的空间是字符串长度的大小+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’没有,所以输出的不是字符串