c - FILE *tmp = tmpfile() 总是在 C 中生成 NULL 指针?
问题描述
我有以下代码:
char buffer[8];
int main(int argc, char *argv[]) {
FILE *input, *output, *tempFile;
input = fopen(argv[1], "rb");
if (input == NULL) {
printf("%s", strerror(2));
exit(EXIT_FAILURE);
}
else {
output = fopen(argv[2], "wb");
if (output == NULL) {
printf("%s", strerror(2));
exit(EXIT_FAILURE);
}
}
tempFile = tmpfile();
for (int i = 0; i < 8; i++) {
fputc(buffer[i], tempFile);
fillBuffer(tempFile);
printf("%s", buffer);
}
if (tempFile == NULL) {
printf("Unable to create temp file");
return 0;
}
}
有些东西被遗漏了,但我相信这是相关的部分。buffer[] 数组有效。如果在 for 循环中我使用
fputc(缓冲区[i],输出);
正确的信息存储在输出文件中。每当我运行这个程序时,我都会得到一堆空结果,然后是“无法创建临时文件”。建议?
解决方案
该tmpfile
函数是标准 C 语言,应该以程序不必关心的某种抽象方式创建临时文件。如果这些文件甚至在文件系统中有位置(不需要它们),则该位置应该是适合临时文件的位置。
似乎 MSVC 的实现tmpfile
是错误的,并且出于历史原因尝试将文件放入"C:\"
其中。如果您要在 MSVC 上构建,您需要使用不同的非标准函数或替换来解决问题,方法是首先在临时文件的有效位置安全地创建一个文件,然后调用fopen
它。
可能可以通过设置环境变量来解决此问题,但如果默认情况下已损坏,则可能不适合您要部署/发布的程序。
推荐阅读
- android - 构建Android AOSP并在模拟器上运行时如何重置用户数据图像?
- java - 为什么添加 Thread.sleep 会使我的 Akka TestKit 单元测试通过?
- python - 如何检查列表(或数组)上的条件,然后在 Python 中根据该条件对元素进行排序
- wordpress - Wordpress Rest API - 如何在使用 get post by slug 时获取所有作者
- microsoft-edge - Edge + VPN + Fiddler
- java - 如何在另一个将读取文件的类中创建构造函数,然后在 main 方法中实例化它?
- java - 如何从一个是产品,另一个是价格的 ArrayList 中获取总值?
- python - 将 Django 模型存储在数据框中并从中获取列名,即使数据框为空
- python - Add new column in Pyspark dataframe based on where condition on other column
- sql - 根据引用表更改列名