gpt4 book ai didi

c - 中止(核心转储)

转载 作者:行者123 更新时间:2023-11-30 20:13:28 28 4
gpt4 key购买 nike

list->history=(char*)malloc(sizeof(char));  
strcpy(list->history,pch2);

当我使用上面的代码时,我无法多次打开该文件。它给了我这个错误:

* Error in `./exec2': malloc(): memory corruption: 0x00000000012060f0 * Aborted (core dumped)

如何多次打开该文件?

最佳答案

由于 sizeof(char) 为 1,因此您分配了 1 个字节,因此 strcpy 将具有未定义的行为,除非源字符串为空。

不要使用strcpy;使用strncpy相反,请注意您的分配大小和空终止:

size_t N = 1;   // or anything you deem suitable

list->history = malloc(N);
strncpy(list->history, pch2, N - 1); // safe
list->history[N - 1] = '\0';

(实际上,情况有点可怕,因为 strcpystrncpy 都不是绝对好的函数。就其本身而言,strcpy 并不是'不安全,因为您无法控制输出缓冲区大小,并且 strncpy 效率低下,因为它写入的零比所需的多;两者都不会返回指向最后复制字符的指针。此外,集合 strncpystrncatsnprintf 在长度参数的含义以及是否以及如何添加 null 终止符方面严重不一致。)

关于c - 中止(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30406487/

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