已经有关于"我如何获得由tmpfile()创建的路径?"的问题.但我的理解是,该标准并不保证创建的文件具有可访问的路径.那么,如果标准不能保证这一点,那么在您写入tmpfile之后,从tmpfile读取的"标准"方式是什么呢?(当然,对于一个永远不会被写入的tmpfile来说是没有意义的,如果您从来没有读过它,那么写入它也没有意义)

我目前有这样的代码:

struct foo {
    ...
};

FILE *fp = tmpfile();
struct foo x = { ... };
struct foo y = { ... };
int err = fwrite(&x, sizeof(struct foo), 1, fp);
printf("err: %x/%x\n", err, errno);
fflush(fp);

err = fread(&y, sizeof(struct foo), 1, fp);
printf("err: %x/%x\n", err, feof(fp));

这就给出了输出

err: 1/0
err: 0/1

我在onlinegd.com上运行这段代码是因为我在这台机器上没有编译器,所以可能是onlinegdb不符合要求,但我想知道是不是这样,或者我的代码是否做错了什么.

推荐答案

我如何(顺从地)读取tmpfile()?

通常和其他FILE*个一样,有fread个.

您的代码是正确的.它从文件中读取.文件末尾没有要读取的内容,因此fread返回0,feof被设置.

如果你想在读完一个文件后从头开始读,先读fseek个文件.

C++相关问答推荐

数组元素的编号索引

为什么已经设置的值在C中被重置为for循环条件中的新值?

如何启用ss(另一个调查套接字的实用程序)来查看Linux主机上加入的多播组IP地址?

如何解决C中的严格别名?

为什么GDB/MI进程的FIFO循环中有read()阻塞

GCC不顾-fno-Builtin-SINCOS旗帜向SINCOS发出呼唤

函数的限制限定指针参数允许优化调用方函数吗?

GTK3按钮信号错误

如何在VS 2022中正确安装额外的C头文件

C11/C17标准允许编译器清除复合文字内存吗?

收到不兼容的指针类型警告,因为函数的返回不是空*,而是 struct 指针

搜索使用int代替time_t的用法

C语言中的数字指针

如何在c中使用具有不同变量类型的内存分配?

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

有没有办法减少C语言中线程的堆大小?

我正在使用c学习数据 struct ,在学习堆栈时,我试图将中缀转换为后缀,并编写了这段代码.代码未给出输出

不兼容的整数到指针转换传递';char';到类型';常量字符*

我的代码可以与一个编译器一起使用,但不能与其他编译器一起使用

如何使用 VLA 语法使用 const 指针声明函数