戻り区切りファイルを読み込もうとしています。フレーズだらけ。
各フレーズを文字列に入れようとしています。
問題は、ファイルを次のように読み込もうとすると、
fscanf(file,"%50s\n",string);
文字列には1つの単語しか含まれていません。スペースにぶつかると、文字列の読み取りを停止します
fscanf(file,"%50[^\n]\n",string);
を除くすべての文字\n
はによって消費されます[^\n]
最大0f50文字が消費されます(文字列に少なくとも51個のスペースがあることを確認してください)
..
\n
",string
これにより\n
、次の呼び出しが単にnull文字列を返さないように、それも消費されます。
fscanf
%s
空白が見つかると読み取りを停止します。
フォーマットされていないテキストを読んでいるので、単純にを使用できますfgets
。これは、指定したバッファがいっぱいになるまで読み取るか、改行()を見つける\n
か、ファイルの終わりに到達するかのいずれか早い方です。
の使用は避けてくださいscanf
。 すでに述べたように、fgets
代わりに使用する必要があります。
固定サイズのバッファを使用せず、任意の長さの行を許可する場合は、ChuckFalconerのパブリックドメインggets
関数を使用してみてください。(そのリンクは現在ダウンしているようですが、archive.orgにコピーがあります。)
fscanfは、過去のスペースを読み取るように変更できます。詳細は少し複雑です。これがmanページが%[...]について言っていることです
指定された受け入れられた文字のセットからの空でない文字のシーケンスに一致します。次のポインタはcharへのポインタである必要があり、文字列内のすべての文字と終了NUL文字のための十分なスペースが必要です。先頭の空白の通常のスキップは抑制されます。文字列は、特定のセットに含まれる(または含まれない)文字で構成されます。セットは、開き角かっこ[文字と閉じ角かっこ]文字の間の文字によって定義されます。開き角かっこの後の最初の文字が曲折アクセント記号^である場合、セットはそれらの文字を除外します。セットに閉じ括弧を含めるには、開き括弧または曲折アクセント記号の後の最初の文字にします。他の位置はセットを終了します。ハイフン文字-も特別です。他の2つのキャラクターの間に配置すると、介在するすべての文字をセットに追加します。ハイフンを含めるには、最後の閉じ括弧の前の最後の文字にします。たとえば、 `[^] 0-9-]'は、「閉じ括弧、0から9、およびハイフンを除くすべて」のセットを意味します。文字列は、設定されていない(または曲折アクセント記号が付いている)文字の外観で終了するか、フィールド幅がなくなると終了します。
したがって、%[^ \ n]は、キャリッジリターンまでのすべてを読み取る必要があります。
最初にPayload_IDを使用してデータを送信します000102 03 .... 10
使用する
char * pChar = ""; //文字列キャプチャ用。
fprintf(fp1、 "%s"、strtok(pChar、 "Payload_ID"));