2017-11-18 120 views
-1

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

这是我的代码:

#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是“/家/ medwajih /桌面/”,并在那里我想创建buffer.txt文件的位置是“/家/ medwajih /桌面/ bufferfile /“

谢谢。

+1

你从不检查'fopen()'的结果。你确定它不是'NULL'吗? – user0042

+0

文件夹'/ home/medwajih/Desktop/bufferfile'是否存在?写入权限还没有被撤销?该文件没有被另一个进程锁定? –

+0

你好,它现在工作正常,因为可执行文件在桌面和文件夹“bufferfile”也在桌面上,但是当我使用另一个路径例如“/home/medwajih/Downloads/bufferfile/buffer.txt”代码终止分段错误 –

回答

0

如果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。当然,请检查它的返回值:-)

如果是别的东西(问题中没有足够的信息来确定它是什么),则需要找到一种不同的方法来纠正问题。

+0

hello,目录bufferfile已存在 –