C++ fopen fwrite 与我选择的特定路径

标签 c fopen fwrite

我正在 Linux 上编写一个写入文件的简单代码。该文件将存储在特定路径中(与可执行文件所在的路径不同)。问题是,当我执行代码时,程序因段错误(核心转储)而终止

这是我的代码:

#include <stdio.h>

int main ()
{
  FILE * pFile;
  char buffer[] = { 'x' , 'y' , 'z' };
  pFile = fopen ("/home/medwajih/Desktop/bufferfile/buffer.txt", "wb");
  fwrite (buffer , sizeof(char), sizeof(buffer), pFile);
  fclose (pFile);
  return 0;
}

请注意,该程序的exe位于“/home/medwajih/Desktop/”,而我要创建buffer.txt文件的位置是“/home/medwajih/Desktop/bufferfile/”

谢谢。

最佳答案

如果fopen失败(例如/home/medwajih/Desktop/bufferfile目录不存在,或者文件存在但具有不允许您替换的权限它),然后 pFile 将被设置为 NULL。

尝试使用它是未定义的行为。

您通常应该检查所有可能无法确保以后不会导致问题的调用,例如:

pFile = fopen ("/home/medwajih/Desktop/bufferfile/buffer.txt", "wb");
if (pFile == NULL) {
    fprintf (stderr, "Could not create file\n");
    return 1;
}

如果问题实际上是目录不存在,您可以事先调用mkdir。当然,还要检查它的返回值:-)

如果是其他问题(问题中没有足够的信息来确定它是什么),您需要找到不同的方法来纠正问题。

关于C++ fopen fwrite 与我选择的特定路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47364657/

相关文章:

c - 是否可以直接将常量值写入二进制文件?

c - 我确信这不应该起作用,但它确实起作用

c - 将数组保存到文件不起作用,程序崩溃

c - 为什么二进制数据文件比数据大?

c - Linux 和 Windows 之间 fwrite 的不同行为

c - MSDN 对 fopen(或 fopen_s)的警告想表达什么?

c - 如何用 ncurses 检测大写锁定?

c++ - 从中序和先序遍历构造二叉树的时间复杂度

c - 32 位有符号整数除法在 PowerPC 上给出 0x7fffffff 作为商

c - 带有路径名和变量文件名的 fopen 不起作用