char s[] = "123456789"; char d[] = "123"; strcpy(d,s); printf("%s,\n%s"
答案:5 悬赏:70
解决时间 2021-12-28 18:43
- 提问者网友:若相守£卟离
- 2021-12-27 21:50
为什么在VS2008里输出的是123456789,123456789
最佳答案
- 二级知识专家网友:专属的偏见
- 2021-12-27 22:16
不用管它,这个写法本来就不规范。
char s[] = "123456789"; // 长度为9
char d[] = "123"; // 长度为3
strcpy(d,s); // 溢出
printf("%s,\n%s",d,s); // 无法预料
char s[] = "123456789"; // 长度为9
char d[] = "123"; // 长度为3
strcpy(d,s); // 溢出
printf("%s,\n%s",d,s); // 无法预料
全部回答
- 1楼网友:木子香沫兮
- 2021-12-28 01:47
额 char d[]你定义一个具体长度试试
- 2楼网友:晚安听书人
- 2021-12-28 00:27
strcpy(d,s)是将s复制到d中 s数组的全部元素包括'\0'全部复制到d中
输出d当然就是123456789了
- 3楼网友:青灯壁纸妹
- 2021-12-28 00:16
内存溢出问题所致,在VC6中,d地址:0x0012ff38,s地址:0x0012ff3c,两个挨在一起了。(vs2008可能不同,结果也不同)
strcpy函数如下:
char * strcpy(char * strDest,const char * strSrc)
{
if ((NULL==strDest) || (NULL==strSrc)) //[1]
throw "Invalid argument(s)"; //[2]
char * strDestCopy = strDest; //[3]
while ((*strDestCopy++=*strSrc++)!='\0'); //[4]
return strDest;
}
- 4楼网友:情战辞言
- 2021-12-27 23:17
你好!
缓冲区溢出,s有10个char大小,而d只有4个char大小,你把s复制到d中,就会出这种问题
strcpy函数不会根据你d的大小而截断s的长度,所以会把s中所有的字符全复制到以d为首地址的空间内
printf输出字符串的时候是不管分配给你空间的是多少的,从起始地址开始,直到遇到'\0'的所有字符他都会给你打出来的
我的回答你还满意吗~~
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯