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

标签 c dynamic malloc scanf

我得到了以下代码:

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/

相关文章:

在Ubuntu上编译动态链接库并获得无法识别的调试输出级别

php - 如何创建从数据库中动态提取的静态 WordPress 页面?

wpf - 在 WPF 中动态更改 XPath 绑定(bind)

scala - 以编程方式向 Spark session 添加/删除执行程序

c - Malloc、字符串指针和 Valgrind

iphone - 在任何操作系统上运行不同格式的可执行文件

c - 函数隐式声明和类型冲突警告

c - 如何确保以下函数没有过度分配?

c - "Double free or corruption"函数内部错误?

C - 有没有办法让变量在循环之外保持不变?