首先是windows下用vs2013编译
void copy(char *src, char *dst)
{
for (; *src != '\0'; src++, dst++)
{
*dst = *src;
}
/**dst = '\0';*/
return;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *s1 = "abcd";
char s2[5];
copy(s1, s2);
printf("s1=%s\n", s1);
printf("s2=%s\n", s2);
return 0;
}
输出结果:
s1=abcd
s2=abcd烫烫烫。。乱码
从输出结果是没有任何问题的,并且当我定义char s3[4]="abcd",编译器报错数组越界。这些都符合我的认识。。
但是以上代码在linux下运行,输出结果是
s1=abcd
s2=abcd
并且char s3[6]="012345";可以运行,且打印出来s3=012345
在Linux下的结果出乎的意料,首先有人建议在s2初始化的时候,会不会第5个字节刚好为空格或0,已经排除。
并且为什么s3[6]=“012345”可以运行,并且打印s3,结果为s3=012345,不合符常理啊。。。
最后,吐槽下CSDN的机制,本来已经开了一个帖子询问这个问题,但是一个人不能连续回复超过3次,导致我还要重新开一个帖子。跟之前那几位大哥们道个歉,不好意思!我已经单步调试过了。