2012-12-21 93 views
1

程序總是結束退出。我似乎經常遇到這個問題,我想我以前曾經修復過它,但我不知道如何。爲什麼不創建文件?爲什麼f中的「w」不會創建一個新文件?

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <string.h> 

int main (void){ 
    FILE *fp; 
    int c; 

    char file_w[100]; 
    char string[100]; 
    printf("Enter filename\n"); 
    fgets(file_w, 100, stdin); 
    fp = fopen(file_w, "w"); 
    if (fp == NULL){ 
     printf("Can't open file\n"); 
     exit(0); 
    } 
    printf("Enter a string"); 
    fgets(string, 100, stdin); 
    for(c = 0; c <= sizeof(string); c++) 
    { 
     fprintf(fp, "%s\n", string); 
    } 

    printf("file written"); 
    fclose(fp); 
    return 0; 
} 
+0

如果您發現問題所在,請更新您的文章或添加答案。順便說一句:你的考試怎麼樣? :) – freedev

回答

0

如果返回值fopen爲NULL,則表示發生了一些錯誤。我建議你看看全球的errno,看看發生了什麼錯誤,可以幫助你調試它不打開文件的原因。

w標誌執行以下操作:

寫:創建輸出操作的空文件。如果已存在具有相同名稱的文件,則其內容將被丟棄,並將該文件視爲新的空文件。

因此,它應該創建一個文件,當它不存在或存在時覆蓋它的內容。

如果不這樣做,您還有其他問題,但是從您提供的信息很少,很難說出它是什麼。

+0

我可以提供哪些其他信息? – the5thace

+0

你有正確的讀/寫權限嗎? –

+0

應該。管理員帳戶。手頭有一個類似的程序! – the5thace

2

嘗試打印的文件的名稱已輸入:

printf("%s\n", file_w); 

你file_w行,只是要確保輸入你想要的東西之後。同樣的情況下,終端可能會被錯誤配置。

嘗試進入一個絕對名稱的路徑,如果你的電腦是Linux或Unix:

/tmp/newfile.txt 

如果您的計算機的Windows ...試試,看看C:\ TEMP \存在(或創建它),然後輸入:

C:\temp\newfile.txt 

在任何情況下,請記住,你可以指定一個絕對路徑,而不僅僅是文件名。因此,請仔細檢查是否有寫入文件所在目錄的權限(即權限)。

如果您想查看錯誤和有問題的更好的描述嘗試使用下面幾行,而不是你的代碼,剛下的fopen

if(fp == NULL) { 
     // Error, as expected. 
     perror("Error opening file"); 
     printf("Error code opening file: %d\n", errno); 
     printf("Error opening file: %s\n", strerror(errno)); 
     exit(-1); 
    } 

字符串錯誤這是一個奇妙的功能,只是因爲回報你對問題的描述而不是錯誤代碼。

+0

我收到一個錯誤打開文件:無效的參數!需要儘快達到這個底部。一小時內完成考試! printf確認名稱沒問題。 – the5thace

+0

我已經在辦公室內20'。然後嘗試先打印文件名。確保你只輸入純文本,沒有奇怪的字符,像?* + – freedev

+0

是的,沒有奇怪的字符名稱是好的! – the5thace

1

我敢打賭,問題是「從fgets()實際名稱後的隱形字符」。我會讓你弄清楚這個角色到底是什麼,它來自哪裏以及如何解決它,因爲「努力解決問題」是編程過程中學習過程的一部分。如果這很容易,每個人都可以做到。

+0

得到20分鐘,直到考試,如果你能想出它我會在部門:P – the5thace

+0

不要擔心,你會得到它。嘗試打印(使用%d)字符串中的每個字符都是文件名...(嘗試使用短名稱!) –

+0

嗯,我可以創建名稱以換行符結尾的文件。這是禁止在Windows上,或者可能是什麼問題? –

相關問題