2011-08-05 5 views
2

何かの理由で、組み込みターゲット、Microchip PIC24、およびランタイムlibc用のCコードを書いていますが、\ 0値をシリアルポートで正しく送信できません。Printfはヌル値を無視しますか?

printf("\xEE\xEE\0test"); 

たとえば、EE EE "test"を送信すると、ヌルバイトは無視されます。

これが原因かもしれないという手掛かりはありますか?

EDIT:Ermmm、決して気にしないXD。 doh '

+0

"EEEEtest"または "test"を送信しますか? – BlackBear

答えて

5

ヌル文字は、が文字列の最後であるため、そこでは文字列ターミネータCでprintfが停止しています。

printf("%c", '\0'); 

お勧めとしてあなたがtestが異なるprintf呼び出しから来ていない、あなたが確認され、ライン上0xEE 0xEE testを取得している場合は、次の作業もフォーマット文字列でputchar()、またはprintf()を使用しますか?

+0

ありがとう、あなたのコメントは私にいくつかの愚かな間違いを知らせてくれた。私はputsを通してsprintfを渡していたので、前者だけが働く(フォーマット文字列で\ 0)、2番目のputsは文字列の途中で止まった。 – overscore

+0

@overscore、良い - 問題解決のような音ですか? –

+0

うん、待つ5分 – overscore

0

null文字は、printfに関する文字列の終わりを示します。私はそれが "テスト"を送信することに驚いています。おそらく、特にシリアルポート経由でwriteシステムコールを使う方が良いでしょう。

+0

'fwrite'もうまくいくでしょう。 –

+0

'write()'または 'fwrite()'を使います。違いは、 'fwrite'はバッファリングを行い、C標準によって定義されていることです(フリースタンディング実装では必要ありません)。 'write'はPOSIXによって定義されます。また、ストリームがバイナリモードであることを確認する必要があります。 'stdout'は通常デフォルトでテキストモードになっていますが、埋め込まれたターゲットの詳細は異なるかもしれません。 –

関連する問題