gpt4 book ai didi

c - 使用 strcpy() 时出现段错误?

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

我有一个全局结构:

struct thread_data{
char *incall[10];
int syscall arg_no;
int client_socket;
};

在 main() 中

char buffer[256];
char *incall[10];
struct thread_data arg_to_thread;

strcpy(incall[0],buffer); /*works fine*/
strcpy(arg_to_thread.incall[0],buffer); /*causes segmentation fault*/

为什么会发生这种情况,请提出解决方法。

谢谢

最佳答案

段错误意味着出现了问题。但是没有段错误并不意味着某些事情没有错误。如果两种情况基本相同,并且一种发生段错误而另一种不发生段错误,通常意味着它们错误,但恰好只有一种情况触发了段错误。

查看 char* incall[10] 行,这意味着您有一个包含 10 个指向 char 的指针的数组。默认情况下,这些指针将指向随机位置。因此,strcpying incall[0] 会将字符串复制到随机位置。这很可能会发生段错误!您需要先初始化 incall[0](使用 malloc)。

所以一个更大的问题是为什么没有第一行段错误?我想这是因为 恰好 之前内存中的任何内容都是有效指针。因此,strcpy 不会出现段错误,它只会覆盖其他内容,这些内容稍后会导致完全意外的行为。所以您必须修复两行代码。

另一个问题(一旦你修复了它)是 strcpy 本身是非常危险的——因为它复制字符串直到它找到一个 0 字节然后停止,你永远无法确定到底有多少它会复制(除非你使用 strlen 来分配目标内存)。因此,您应该改用 strncpy 来限制复制到缓冲区大小的字节数。

关于c - 使用 strcpy() 时出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6288642/

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