分段错误:没有这样的文件或目录

问题描述:

我有以下代码:分段错误:没有这样的文件或目录

FILE* fp; 
    if(value.empty()) 
     return ID; 
    fp=fopen((tmpDir+"/"+filename).c_str(),"a"); 
    string sID=""; 
    if(ID>-1){ 
     sID=to_string(ID)+"\t"; 
    } 
    string row=sID+drawingID+"\t"+data+"\n"; 
    fprintf(fp,"%s",row.c_str()); 
    fclose(fp); 

在GDB,代码失败,出现以下错误:

Program received signal SIGSEGV, Segmentation fault. 
    __GI__IO_fputs (str=0x4a864 "1000001\t0\t70\t1\n", fp=0x0) at iofputs.c:38 
    38 iofputs.c: No such file or directory. 
+5

'fp = fopen((tmpDir +“/”+ filename).c_str(),“a”);'This is not C. –

+0

你不能做'tmpDir +'/“+ filename'它不是C++ –

+2

你的在调用fopen后,代码无法检查fp是否为NULL。如果文件无法打开,'fopen'返回NULL。 –

你没有检查fopen的结果。

根据错误信息fp为0,表示fopen失败。

我猜测,tmpDir不存在或不可访问,或者文件不存在。

+0

我建议有更多基本的东西是错误的,比如尝试使用“+”运算符连接字符串。虽然你说的是真的,但并不是事情突破的原因。 –

+0

如果'tmpDir'和'filename'的类型为'std :: string',则@DavidHoelzer将字符串与'+'连接起来可以。 'c_str()'的用法表明代码实际上是C++。 –

+0

啊,你是对的。我依靠问题中的“C”标签。 –