gpt4 book ai didi

c - 将 fscanf 与动态分配的缓冲区一起使用

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

我得到了以下代码:

char buffer[2047];
int charsRead;

do {
if(fscanf(file, "%2047[^\n]%n%*c", buffer, &charsRead) == 1) {
// Do something
}
} while (charsRead == 2047);

我想将此代码转换为使用动态分配的变量,以便在经常调用此代码时不会出现严重的内存泄漏。因此,我尝试了这个:

char *buffer = malloc(sizeof(char) * 2047);
int *charsRead = malloc(sizeof(int));

do {
if(fscanf(file, "%2047[^\n]%n%*c", *buffer, charsRead) == 1) {
// Do something
}
} while (*charsRead == 2047);

不幸的是,这不起作用。我总是在 fscanf 调用的 if 语句之前收到“EXC_BAD_ACCESS”错误。我做错了什么?

感谢您的帮助!

-- 赖

最佳答案

原始代码比新代码泄漏的可能性要小得多,因为编译器正在为您管理内存,但如果您觉得必须,请更改为:

if(fscanf(file, "%2047[^\n]%n%*c", buffer, charsRead) == 1) {

您不想在这里取消引用缓冲区,就像您在第一段代码中所做的那样。这样做会给您缓冲区中的第一个字符,但您需要缓冲区的地址。

关于c - 将 fscanf 与动态分配的缓冲区一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2529627/

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