1
void deleteFile( FAT *allotable ) {
/* PRECONDITION: This function expects a FAT structure that is valid.
 * POSTCONDITION: A file is flagged as removed from the disk and it will 
 * be possible to write over it
 */

    // Local variables
    unsigned char test[9] = { 0 };

    // Select file to remove
    // TODO: The user will select the file to remove based on the 
    // listing in listDir
    // For testing, we are removing file at location 0 in the entry
    fgets( test, NAME_SIZE, stdin );
    return;
}

関数を実行して文字列を入力すると、文字列がstdoutに出力されて表示されます。バッファに問題があると確信していますが、これを理解できないようです。

4

3 に答える 3

1

次の場合に実行すると、次のようになります。

./program
input<CR>
input
<prompt>

その後、あなたが提供したコードはそれを行う責任がありませんでした。いくつかのデバッグステートメントまたはデバッガーを使用して、そのエコーがどこから来ているのかを把握します。これは、fgetsが行うことではないためです。

あなたが見ている場合:

./program
input<CR>
<prompt>

それが端末の仕組みです。その機能を無効にしない限り、入力時にテキストがエコーバックされます(パスワードの入力に便利です)。

于 2012-11-20T20:50:16.693 に答える
0

コンソールに文字を入力すると、エコーバックされます。から読み取る場合でも、文字は読み取られstdinます。

または、プログラムの出力を独自のプログラムにパイプするか、ファイルをstdinにリダイレクトすることもできます。これらの2つの場合、文字はエコーされません。

echo Program output | ./myprog

また:

./myprog < fileinput.txt

編集-それは端末の問題のように聞こえます。

使用しているシステムやそのシステムとのインターフェース方法については説明していませんが、PuTTYを使用してSSH経由でシステムに接続することでこの動作を実現できます。

「ローカルエコー」と「ローカルライン編集」の両方を強制するように端末設定を変更します。次に、Enterキーを押すたびにラインがエコーされます。明らかに、そのうちの1つだけをオンにする必要があります。できれば「ローカルエコー」。

于 2012-11-20T20:48:46.323 に答える
0

これの一般的な原因は、端末(おそらく最近のエミュレーター)とOS端末ドライバーの両方でエコーが有効になっていることです。Unixを使用していると仮定すると、次の場合に問題は解決しますか?

stty -echo

プログラムを実行する前に?

于 2012-11-20T21:04:29.520 に答える