【发布时间】:2011-02-27 20:49:29
【问题描述】:
我可以使用 fopen() 将文件指针写入文件。但是我可以创建一个文件指针,以便调用 fputc 或 fprintf 等函数将写入内存中的指针吗?这方面的一个例子是 java 中的 ByteArrayOutputStream。另外:我可以反向运行它吗,一个库需要一个文件指针来读取,所以我分配内存,并创建一个新的文件指针,它将从这个内存位置读取,但是当块的大小用完时返回 EOF? (如 Java 中的 ByteArrayInputStream)。有没有办法在C中做到这一点?例如:
FILE *p = new_memory_file_pointer();
fprintf(p, "Hello World!\n");
char *data = get_written_stuff(p);
printf("%s", data); //will print Hello World!
&& / ||
char s[] = "Hello World!\n";
FILE *p = new_memory_file_pointer_read(s, sizeof(s));
char *buffer = (char *)malloc( 1024*sizeof(char) );
fread((void *)buffer, 1, sizeof(s), p);
printf("%s", buffer); //prints Hello World!
编辑: 对于多年后阅读此问题的人,除了已接受的答案之外,您还应该查看open_memstream(3),它的行为比fmemopen 更像这些Java 类。
【问题讨论】:
-
明确一点,当您使用
fopen()时,您创建的不是指向文件的指针,而是指向代表该文件的结构的指针。 -
@Jeff M 我知道。我只是使用了术语文件指针
-
您是否真的想将一个六年前的问题标记为一个八年前没有公认答案的问题的重复?
-
编辑们的时间难道没有更好的事情要做吗?