2015-05-29 73 views
1

我現在很困惑。我想創建一個文件並寫入一個之前創建的字符串。但是當下面的代碼被執行時,會發生分段錯誤並且程序終止。c - 打開文件時出現分段錯誤

FILE* output; 
output = fopen("test.txt", "w"); 
fprintf(output, line); 
fclose(output); 

該行聲明如下。

char* line = NULL; 
line = malloc(1048576 + 1); 

首先,我認爲會出現,因爲的malloc的錯誤,但是這個代碼不工作之一:

FILE* output; 
output = fopen("test.txt", "w"); 
fprintf(output, "LBASDHASD"); 
fclose(output); 

我在做什麼錯?在該行之前運行的代碼中,我也使用了文件指針,但文件已關閉。

+4

那麼,首先你不檢查fopen的結果。 – OldProgrammer

+0

除了分配內容之外,你還會做任何事嗎? –

+3

'fprintf(file,line)'的用法也很危險,因爲變量'line'可能包含fomat說明符。考慮使用'fprintf(文件,「%s」,行)'。 –

回答

1

你的代碼不好,因爲你不檢查錯誤。 output可能是一個空指針(而很可能是一個):

#include <errno.h> 
#include <string.h> 

FILE* output; 
output = fopen("test.txt", "w"); 
if(!output){ 
    //handle the error 
    printf("something went wrong: %s", strerror(errno)); 
    exit(1); 
} 
fprintf(output, "LBASDHASD"); 
fclose(output); 

你確定你有權限創建的CWD文件?

fopen()errno設置爲發生故障時的錯誤代碼。像往常一樣strerror(errno)會給你這個錯誤代碼的描述。

0

看看你有沒有正確的文件名,並確保它在同一目錄中,否則提供文件的完整路徑。如果它錯了,那麼它將不會打開並確保文件權限。

#include <stdio.h> 

int main() 
{ 
    FILE *output; 
    output = fopen("test.txt","w"); 
    if(output==NULL) 
    { 
     printf("Error in opening the file"); 
     return 0; 
    } 
    fprintf(output, "%s", "LBASDHASD"); 
    fclose(output); 
    return 0; 
}