1

fgets長さが不明なキーボードバッファからの文字列を使用して読み取るにはどうすればよいですか?*fgets(char *s, int size, FILE *stream);

サイズの位置であげfgetsてもいいですか?NULLint

4

2 に答える 2

7

いいえ、行末記号が何であるか (通常は改行や改行) を知っている必要があり、それを取得するまでループで読み続ける必要があります。もちろん、バッファを拡張し、取得した各ピースをバッファにコピーする必要もあります。

持っている場合は、POSIX'getline()がこれを行います。

于 2013-01-10T14:40:39.177 に答える
3

の長さの引数はfgets、関数が よりも「優れている」理由の 1 つですgets。渡すバッファが収まるデータ量を絶対に指定する必要があります。そうしないと、アプリがクラッシュする可能性があります。

ほとんどのアプリケーションでは、受け取ると予想されるものに適合する必要がある限り、バッファーを数回使用するだけです。

getline を使用すると malloc/realloc が発生する可能性があります。動的メモリの使用に問題がない場合は、その関数を自由に使用してください。buffer[MAX_SIZE+1]私は単純な変数を好みます。

于 2013-01-10T14:45:50.567 に答える