これは私を夢中にさせています。ファイル名のユーザー入力を受け入れるプログラムを作成しました。~/documents/cs ディレクトリで実行すると意図したとおりに動作しますが、 ~/documents/cs/assign5 ディレクトリでは失敗します。これは私にはまったく意味がありません。プログラムが存在するディレクトリに基づいて、プログラムの動作が異なるのはなぜですか?
親ディレクトリでの実行からの良好な出力:
./a.out - file2
Enter the filename: file1
FILE1
FILE2
assign5 ディレクトリからの不正な出力:
./a.out - file2
Enter the filename: file1
file1
n: No such file or directory
assign5 ディレクトリの名前を別の名前に変更してみましたが、うまくいきました。
このプログラムは、基本的に 2 つのコマンド ライン引数を取ります。「-」コマンドライン引数が存在する場合、ファイル名を要求します。次に、両方のファイルの内容を標準出力に出力します。プログラムが失敗している場所は次のとおりです(assign5ディレクトリのみ...)。プログラムが assign5 ディレクトリで実行されると、userInput 変数に「file1」ではなく「n」という値が格納されているようです。どうして!?
if(strcmp(argv[1], "-") == 0) // use standard-in for input file 1
{
printf("Enter the filename: ");
fflush(NULL);
read(STDIN_FILENO, userInput, sizeof(userInput));
userInput[strlen(userInput)-1] = '\0';
if((input_file1 = open(userInput, O_RDONLY)) < 0)
{
perror(userInput);
exit(1);
}
アップデート:
「assign5」というディレクトリのリモートLinuxサーバーでまったく同じコードを実行したところ、意図したとおりにコンパイルおよび実行されました。それで、何、私のコンピューターに何か問題がありますか?