gpt4 book ai didi

c - linux c程序中函数strcpy的奇怪段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:30 26 4
gpt4 key购买 nike

这是我的源代码:

char *
cpy_strcpy (dest, src)
char *dest;
const char *src;
{
char c;
char *s = (char *) src;
const ptrdiff_t off = dest - s - 1;

do
{
//c = *s++
//s[off] = c;
s[off] = *s;
}
while (*s++ != '\0');
//while( c != '\0' );
return dest;
}

我在使用 gdb 调试时得到了这个:

(gdb) s
26 while (*s++ != '\0');
(gdb)
27 return dest;
(gdb)
28 }
(gdb)

Program received signal SIGSEGV, Segmentation fault.
0x000000000040050a in cpy_strcpy (dest=can't compute CFA for this frame
) at strcpy.c:28
28 }

此源代码是从 glibc 复制的,但我更改了一些行(带有注释//)

我真的想不通我的新代码有什么问题。谁能帮帮我?

提前致谢!

最佳答案

s[off] = *s 在第一个循环中是错误的。

s[off] 指向地址s + off,在第一个循环中是:

s + off = s + (dest - s - 1) = dest - 1

地址 (dest - 1) 超出了 char 数组的左边界。

原代码是对的,因为c = *s++可以先给c赋值s,然后增加s,使得s[off] in s [off] = c 只是指向 dest,而不是 dest - 1

关于c - linux c程序中函数strcpy的奇怪段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com