0

私の問題はprintfプリント バッファに起因していると思いますが、C やバッファについてほとんど知らないため、これを処理する方法を知ることができません。私は単純なプログラムを作成しましたが、入力されたファイルに応じて、いくつかのif/ステートメントに基づいて一連のテキスト (文字/文字列) を出力するだけです。else次のように Unix シェルから呼び出す場合:

gcc -o myProgram myProgram.c
./myProgram fileName

最初の実行でのみ正しく印刷されます。これらの手順を繰り返してプログラムをもう一度実行すると、出力printfの間に一連の「bash」コマンドが出力されます。この問題をデバッグまたは修正する簡単な方法はありますか? わからない場合は、私はCに非常に慣れていません。これを学校の課題の一部として使用しているので、実際にこれを理解し、この概念を理解しようとしています。私の実際のプログラムの割り当て。

編集: これは、私の問題をデモするための一時的な例
です。 注: 入力されたファイルにはテキストのみが含まれています。

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

struct S{
    char word[30];
}s;

int main(int argc, char ** argv)
{
    void print(struct S *s);
    int i; 
    FILE *f = fopen(argv[1], "rb");
    fseek(f, 0, SEEK_SET);
    fread(&s, sizeof(s), 1, f);
    print(&s);
    fclose(f);
}

void print(struct S *s)
{
    int i = 0;
    printf("Word: ");
    for(i = 0; i < 30; i++)
    {
        if(s->word[i] != '\0')
        {
            printf("%c", s->word[i]);
        }       
        else
        {
            break;
        }
    }
    printf("\n");
}
4

1 に答える 1

4

これをテストできます:

main() の最初の行に次の行を追加します。

setbuf( stdout , NULL );

プログラムの出力はバッファに格納され、printf を呼び出すと抽出されます。そのバッファの処理には setbuf() メソッドが使用されます。setbuf(stdout , NULL) を追加すると、出力を保存せず、プログラムの出力を stdout に直接送信するバッファが通知されます。

于 2012-09-19T04:18:59.173 に答える