2017-08-06 6 views
-1

私はユーザーから与えられた名前のファイルを作成するプログラムを作っていました。fgetsは最後にゴミを印刷します

#include <stdlib.h> 
#include <stdio.h> 
#include <fcntl.h> 
int main() 
{ 
     int g; 
     char file[15]; 
     fgets(file,15,stdin); 
     g=open(file,O_CREAT | O_WRONLY,__S_IWRITE); 


} 

しかし、ファイル名の末尾にガベージ文字を含むファイルが作成されます。どうすれば修正できますか?ここ

は、サンプルの実行です:

$ ./a.out 
coolfile.txt 
$ ls 
a.out coolfile.txt? test.c 

同じプログラムが、単に取得する機能を使用すると、正しいファイル名を与えますが、私は使用すべきではない得ることを聞いていました。

+0

現在、コード内に書き込み関数が呼び出されていないため、ファイルの内容を表示してください。また、ファイルディスクリプタを開いた後、常にファイルディスクリプタを閉じる必要があります。 – PhilMasterG

+2

'fgets()'は ''\ n''を保持します。おそらく、文字が印刷可能なファイル名の問題です。 – chux

+0

@PhilippGrasslファイルが空です。私はcatコマンドを使用しました。 –

答えて

2

fgets店舗各行の目の終わりに\nので、あなたは\n

はこの使用strcspn機能

をドットにすることを取り除く必要があるので、あなたのコードは、あなたが見ることができます。この

#include <stdlib.h> 
#include <stdio.h> 
#include <fcntl.h> 
#include <string.h> 
int main() 
    { 
    int g; 
    char file[15]; 
    fgets(file,15,stdin); 
    file[strcspn(file, "\n")] = 0; 
    g=open(file,O_CREAT | O_WRONLY,__S_IWRITE); 
    } 

のようになります。 strcspnに関する詳細情報: - https://www.tutorialspoint.com/c_standard_library/c_function_strcspn.htm

こちらも参照してください: - Removing trailing newline character from fgets() input

1

fgets()は結果の各行の最後に改行を格納します。したがって、改名文字で終わる名前のファイルを作成しています。これを修正するには、最後の文字を確認して、の場合は'\0'に設定します。

関連する問題