0

私は C から始めたばかりです。私のプログラムでは、ユーザーがファイル名を入力し、ファイルが存在するかどうかを確認します。

これまでのコードは次のとおりです。

    printf("Enter the file name:\n");
    char filename[50];
    fgets(filename, 50, stdin);
    printf("You have entered %s\n", filename);
    if( access(filename, F_OK ) == -1 )
    {
        printf("File not found/access denied.\n");
    }

プログラム自体と同じディレクトリに、「steps」という名前のファイルを取得しました。ただし、steps、./steps、または ~/steps を入力するたびに、ファイルが見つからないというエラー メッセージが表示されます。

ここで何が問題なのですか?

ちなみにLinux(Ubuntu)です。また、ファイルにアクセスできることは確かです。したがって、アクセス許可の問題ではありません。

4

2 に答える 2

1

fgetsバッファに末尾の改行が含まれているため、accessそれがファイル名の一部であると考えられます。New-Line を削除する必要があります。

fgets の後に、次の行を追加します。

if (filename[strlen(filename)-1] == '\n') filename[strlen(filename)-1] = '\0';

それを剥がします。

編集: @alk が指摘したように (感謝)、これは次のようになります。

if (strlen(filename) > 0 && filename[strlen(filename)-1] == '\n')
    filename[strlen(filename)-1] = '\0';

&&左辺が評価される場合、右辺は評価されないfalseため、配列の境界の外に出る可能性はありません。

于 2013-09-28T16:55:42.403 に答える
1

null 文字の前に fgets()追加するためです。\n

たとえば、「abcd」と入力すると、「abcd\n」になります。

\nファイル名を読み取った後、ヌル文字に置き換えるだけです

 fgets(filename, 50, stdin); 

 if(filename[strlen(filename)-1]=='\n')
    filename[strlen(filename)-1]='\0';
于 2013-09-28T16:56:59.013 に答える