本帖最后由 刘前辈 于 2012-2-25 13:24 编辑
其实别看垒了200多楼,实质问题没一个看出来!不知道1952当年看出来没有。反正所长是没看出来。最年长,代表最高水平的所长认为:最正确的、绝对没有问题的、答案是:
memcpy(*a,*b,sizeof(……));
所长:“谁不用memcpy(),赶出论坛!”
哈哈,所长说的竟然是以K&R C标准为基础,难道不知道ANSI C 已经明确定义、改进了K&R C 关于结构不能拷贝的问题? 上面这个库函数的不足,就是:假定目标指针a + i 指向的内存超过源指针b指向位置时,memecpy( )函数将发生源数组数据被覆盖丢失!编译器无法检测出这类问题,编译器规则是:——“定义了一个指针,就相当于定义了一个未知(用户程序任意定义)长度的数组”。
举个例子:(与本题目具体无关)
char str[7]="aabbcc";
memcpy(str+2,str,4);
上面运行结果,源数组数据成了"aaaabb"! —— 灾难发生。
而2个同类型结构拷贝,决不会发生这种情况。编译器就确定了内存的正确分配。
看来LZ这道面试题并不简单。
、、
、、 |