读书人

请问一个strcpy的有关问题多谢

发布时间: 2012-04-03 12:38:19 作者: rapoo

请教一个strcpy的问题,谢谢!
代码:
#include <stdio.h>
int main()
{
char c[] = "123456789 ";
char d[] = "1234 ";
strcpy(d, c);
printf( "%s,%s\n ", d, c);
}
为什么VC6.0编译器通过编译后输出的是
123456789,9呢?

[解决办法]
这是因为你在strcpy(d, c)这句的时候,把更长的c拷到了短的b里面,使d产生内存错误,

但由于你只是对d进行printf操作,一般不会报错,而只是从d的首地址向后输出,直到\0为止.

但是对于你的这种做法,许多书藉都说过,是 "未定义 "的行为.

也就是说,有可能发生一切事情,所以你没必要去研究为什么你的输出是那个样子,

只要知道你的做法是错的就可以了.

我在dev c++里编译就不是你的结果.

修改就是把strcpy(d, c)改成strcpy(c, d)即可.短的拷到长的里面.
[解决办法]
strcpy()不对目标地址进行大小检查,lz的情况是越界了。


不同的情况下的结果是不一样的,还很可能错误。

你的情况很可能是这么造成的,把c拷贝给d,d越界,覆盖了c的地址。

结果救出来这样的奇怪东东。。。


[解决办法]
#include <stdio.h>
int main()
{
char c[10] = "123456789 ";
char d[10] = "1234 ";
strcpy(d, c);
printf( "%s,%s\n ", d, c);
}
这样试试
估计是因为数组下标越界了
[解决办法]
对于c,d这两个数组来说,它们内部的字节是逻辑连续的,也就是char c[]= "123456 "这里面的 "123456 "是占了连续的7个字节,但数组与数组之间是否连续是不一定的,因为系统可能要在c数组和d数组之间加一些东西.
[解决办法]
数组的首地址需要对齐的,应该是以内嵌类型的最大size为对其的基准
[解决办法]
楼上说的是结构体,数组内元素都是同一类型的,不存在最大对齐问题

读书人网 >C语言

热点推荐