6

戻り区切りファイルを読み込もうとしています。フレーズだらけ。

各フレーズを文字列に入れようとしています。

問題は、ファイルを次のように読み込もうとすると、

fscanf(file,"%50s\n",string);

文字列には1つの単語しか含まれていません。スペースにぶつかると、文字列の読み取りを停止します

4

5 に答える 5

5
fscanf(file,"%50[^\n]\n",string);
  1. を除くすべての文字\nはによって消費されます[^\n]

  2. 最大0f50文字が消費されます(文字列に少なくとも51個のスペースがあることを確認してください)

  3. ..\n",stringこれにより\n、次の呼び出しが単にnull文字列を返さないように、それも消費されます。

于 2010-04-27T03:58:12.123 に答える
3

fscanf%s空白が見つかると読み取りを停止します。

フォーマットされていないテキストを読んでいるので、単純にを使用できますfgets。これは、指定したバッファがいっぱいになるまで読み取るか、改行()を見つける\nか、ファイルの終わりに到達するかのいずれか早い方です。

于 2010-04-27T03:54:49.880 に答える
3

の使用は避けてくださいscanf すでに述べたように、fgets代わりに使用する必要があります。

固定サイズのバッファを使用せず、任意の長さの行を許可する場合は、ChuckFalconerのパブリックドメインggets関数を使用してみてください。(そのリンクは現在ダウンしているようですが、archive.orgにコピーがあります。)

于 2010-04-27T04:02:00.670 に答える
2

fscanfは、過去のスペースを読み取るように変更できます。詳細は少し複雑です。これがmanページが%[...]について言っていることです

指定された受け入れられた文字のセットからの空でない文字のシーケンスに一致します。次のポインタはcharへのポインタである必要があり、文字列内のすべての文字と終了NUL文字のための十分なスペースが必要です。先頭の空白の通常のスキップは抑制されます。文字列は、特定のセットに含まれる(または含まれない)文字で構成されます。セットは、開き角かっこ[文字と閉じ角かっこ]文字の間の文字によって定義されます。開き角かっこの後の最初の文字が曲折アクセント記号^である場合、セットはそれらの文字を除外します。セットに閉じ括弧を含めるには、開き括弧または曲折アクセント記号の後の最初の文字にします。他の位置はセットを終了します。ハイフン文字-も特別です。他の2つのキャラクターの間に配置すると、介在するすべての文字をセットに追加します。ハイフンを含めるには、最後の閉じ括弧の前の最後の文字にします。たとえば、 `[^] 0-9-]'は、「閉じ括弧、0から9、およびハイフンを除くすべて」のセットを意味します。文字列は、設定されていない(または曲折アクセント記号が付いている)文字の外観で終了するか、フィールド幅がなくなると終了します。

したがって、%[^ \ n]は、キャリッジリターンまでのすべてを読み取る必要があります。

于 2010-04-27T03:59:36.307 に答える
-1

最初にPayload_IDを使用してデータを送信します000102 03 .... 10

使用する

char * pChar = ""; //文字列キャプチャ用。

fprintf(fp1、 "%s"、strtok(pChar、 "Payload_ID"));

于 2017-05-04T06:19:17.553 に答える