读书人

关于strcpy拷贝的有关问题多谢各位

发布时间: 2013-03-12 11:19:35 作者: rapoo

关于strcpy拷贝的问题,谢谢各位
char s[]="123456789";
char d[]="123";
strcpy(d,s);
printf("%s,/n%s",d,s);
return 0;


网上说的结果输出:123456789,56789。

而我输出的结果是123456789,123456789,这是什么问题啊,谢谢各位

我运行了一下,结果是123456789,56789啊,和LZ结果不一样啊...求解..

PS:回车的那个/n 是错的吧,应该是\n 吧......

[解决办法]
数组都越界了,还相信什么网上说的。
[解决办法]
那个链接我看了,实际上,原作者基本上是对的。比如,栈是从高地址向低地址扩展。
但是,他做了一个错误的假设,他主为在栈中,数据是连续存储的。实际上,这个是编译器相关的。就是说,有的编译器是,有的不是。

像我的编译器(64bit liunx , gcc), d s之间是有部分空隙的。
比如123\0(这里有12个字节的空隙)123456789\0
估计你的编译器和我的差不多。你可以试着把d变得更长,再运行。你会发现,确实字符串重叠了
[解决办法]
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

[解决办法]
试试改成release版运行,结果可能就是123456789,56789了
[解决办法]

引用:
你去宾馆订房间,订了3个人的,结果来了9个人住,肯定住不下了,结果正好现在隔壁连着的几个房间都没人住,你们可以庆幸的住一晚,但是你觉得以后订房间还可以订的不够而这样搞吗?

说的太形象了。。。。。

读书人网 >C++

热点推荐