0

fgets()を使用してユーザーから入力された2つの文字列を出力したいと思います。fgets()を使用すると、スペースを含む文字列を格納し、Enterキーで終了することができました。サンプルコードは次のとおりです。

fgets(tTemp ->string, 51, stdin); fflush(stdin);

次に、画面に印刷します。

printf("%s", temp->string); printf(":%s", temp->string2); 
//assuming there are 2 strings

次のような形式で同じ行に印刷するようにします。

string:string1

ただし、次のコードの結果は次のとおりです。

string

:string

\n希望の形式を取得するために印刷するときにfromfgetsを表示しないようにするにはどうすればよいですか?

4

2 に答える 2

1

\n文字列内の改行を削除する最も簡単な方法は、その文字 ( ) をヌル文字 ( )\0に置き換えることです。

char *ptr = tTemp->string;
ptr[strlen(ptr)-1] = '\0'
于 2012-12-09T09:06:17.040 に答える
0

あなたはそれを取り除かなければなりません。最初に末尾へのポインターを取得し、それが改行かどうかを確認し、その場合は NUL バイトに置き換えます。

char *eptr = tTemp->string + strlen(tTemp->string) - 1;

if (eptr >= tTemp->string && *eptr == '\n')
    *eptr = '\0';

eptr >= tTemp->stringfgets から空の文字列が返された可能性があるため、これが必要です。この場合、eptr は開始前を指します。

fgets が NULL を返すかどうかも確認する必要があります。それを行っているかどうかは明確ではありません。NULL が返された場合、文字列バッファは変更されず、以前にあったものはそのまま残ります。

編集: 実際、man ページを読むと、空の文字列を返すことはできないようです。NULL が返されない場合、少なくとも 1 文字が読み取られます。それでも小切手を持っていても問題ありません。

于 2012-12-09T08:50:12.143 に答える