我有一个只能将字符串打印到文件的界面,我在嵌入式系统上工作,因此打开文件不是一个选项
我使用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);
行该程序运行正常,这是一个选项吗?如果不是我怎么能解决这个问题。
答案 0 :(得分:1)
mem_stream = open_memstream(mem_buf,&mem_len);
这一行应该是这样的:
mem_stream = open_memstream(&mem_buf,&mem_len);
如函数文档中所述
/ *打开一个写入malloc&缓冲区的流,该缓冲区被扩展为 必要。 * BUFLOC和* SIZELOC使用缓冲区的位置进行更新 和fflush或fclose上写的字符数。 * /
extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur;
char ** __bufloc
是char *缓冲区的地址。