首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-03 
请教一个strcpy的问题,谢谢!代码:#includestdio.hintmain(){charc[]123456789 chard[]1234 strc

请教一个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为对其的基准
[解决办法]
楼上说的是结构体,数组内元素都是同一类型的,不存在最大对齐问题

热点排行