gpt4 book ai didi

c - strncpy 导致 LPC-2378 挂起/死亡

转载 作者:太空宇宙 更新时间:2023-11-04 00:52:05 24 4
gpt4 key购买 nike

我正在 Olimex LPC2378-STK 上做一些工作。

我有以下声明。

unsigned char buffer[256];

然后我尝试做:

strncpy((char *)buffer, "CREATED_BY", 255);

有谁知道为什么这会导致问题。

如果我注释掉它运行没有问题的代码行,但使用它似乎会导致程序终止。

有人有什么想法吗?

最佳答案

您发布的代码本质上没有错,但没有上下文。例如,如果 buffer[] 是局部变量,它将在堆栈上创建,并且您可能会溢出堆栈。

您可以将其声明为 static 以查看问题是否消失,这将验证堆栈溢出。如果变量需要是临时的,那么您将需要分配一个适当更大的堆栈。

请注意,堆栈溢出可能不会专门发生在 strncpy 中。 buffer 可能包含在堆栈中,但其大小可能已将其他对象推到堆栈之外,因此写入它们 会导致堆栈损坏。失败点通常是函数尝试使用损坏的返回地址返回时。您真的应该使用调试器来单步执行代码,以查看调用堆栈、堆栈指针以及函数是否在 strncpy 上失败或调用函数返回时失败。

关于代码安全性和可维护性的一点,你应该更喜欢:

strncpy((char *)buffer, "CREATED_BY", sizeof(buffer) - 1);

您还可以更方便地使用初始化器:

unsigned char buffer[256] = "CREATED_BY" ;

关于c - strncpy 导致 LPC-2378 挂起/死亡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15045953/

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