跪求 一个关于strcpy 的问题
近来在学习一个c语言编程的模型,运行是出现问题。调试发现是strcpy的问题。调试信息如下:
(gdb) print StrStart
$3 = 0xbfff6c9d "CONVENTIONAL"
(gdb) step
(gdb) print StrStart
$4 = 0xbfff6c9d "ONVETIIONAL"
(gdb) print Buffer
$5 = 0xbfff6c9c "CONVETIIONAL"
step时运行的程序为
strcpy(Buffer, StrStart);
即 在运行 strcpy之前 StrStart的取值为“CONVENTIONAL” 但是运行后 StrStart的取值变为“ONVETIIONAL” Buffer的取值为“CONVETIIONAL”。网上查来说是内存溢出的原因,请教各位大神 这个怎么解决。
我的系统是 ubuntu linux
[解决办法]
把你的代码贴出来吧,估计是因为Buffer和StrStart的大小问题,StrStart被Buffer覆盖了,两个变量应该是相邻的吧。。。
[解决办法]
貌似这是典型的“覆盖问题”,也就是说strcpy中,dest 和 src地址有问题 ,比如说 src地址 是1 2 3 4 5 6,而你的dest 却是 3 4 5 6 7 8 ,这时候就会出现问题。
如果不是这个问题,麻烦你贴出代码让大家看下
[解决办法]
这两个字符串各自存放在内存中的什么位置?你分配给了它们各多大的空间
这两个问题不清楚的话,就不要使用字符串
[解决办法]
strcpy即string copy
copy的意思就是操作完成后保证旧源和新目标的内容一致,且新源不被修改。
当源和目标的地址有重叠时,“保证源和目标的内容一致”是根本无法做到的。
所以才有
memmove这个函数,即memory move
move的意思就是操作完成后保证新目标的内容和旧源的内容一致,但不保证新源不被修改!
[解决办法]
字符串的大小为strlen("CONVENTIONAL")+1 因为有结束符‘\0’你看看是不是你字符串的大小少1位。
[解决办法]
man strcpy
DESCRIPTION
The strcpy() function copies the string pointed to by src, including the terminating null byte ('\0'), to the buffer pointed to by dest. The strings may
not overlap, and the destination string dest must be large enough to receive the copy.
StrStart[n - 1]= '\0'