gpt4 book ai didi

在内存流 FILE 上调用 fclose 会导致段错误

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

我有一个仅将字符串打印到文件的界面,并且我在嵌入式系统上工作,因此打开文件不是一个选项
我使用 open_memstream 在内存中创建了一个虚拟文件,在使用该文件并解析字符串后,程序在 fclose 上失败,导致段错误
这是代码:

/*
* Creating a temp file in memory
*/
FILE * mem_stream;
char * mem_buf;
size_t mem_len;
mem_stream = open_memstream(mem_buf,&mem_len);

XMLDoc_print(doc, mem_stream, NULL, NULL, 0, 0 ,0);
XMLDoc_free(doc);

/*
* Reading the temp file
*/

fseek(mem_stream,0,SEEK_END);
long file_size = ftell(mem_stream);
rewind(mem_stream);
char * contents = malloc( (file_size+1) * sizeof(char) );
fread(contents, sizeof(char), file_size, mem_stream);
/*
* closing the file
*/
fclose(mem_stream);
contents[file_size] = 0;


printf("\n THE RESULT XML IS : %s \n" , contents);

如果我注释 fclose(mem_stream); 行,程序工作正常,这是一个选项吗?如果不是,我该如何解决这个问题。

最佳答案

mem_stream = open_memstream(mem_buf,&mem_len); 这行应该是这样的:
mem_stream = open_memstream(&mem_buf,&mem_len);正如函数文档中所述

/* Open a stream that writes into a malloc'd buffer that is expanded as necessary. *BUFLOC and *SIZELOC are updated with the buffer's location and the number of characters written on fflush or fclose. */

extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur;

char ** __bufloc 是 char * 缓冲区的地址。

关于在内存流 FILE 上调用 fclose 会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27718107/

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