私は、変更されたlinuxのカスタムバージョン(そのハンドスキャナ)を実行する組み込みシステムのドライバを作成しています。製造元は、少数のライブラリとサンプルをインバウンドにしたカスタムEclipse Junoディストリビューションを提供しています。文字配列の最後の前に 0を使用する安全性
私がcomportから受け取った出力は、標準文字配列の形になります。私はこのような(エラーIDおよびエラー・コード)情報を伝えるために、アレイ内の個々の文字を使用しています:
tmp
は最初
0
に初期化し、その後で満たされている文字
tmp[500];
の形式の文字列である
if (tmp[i] == 250])
comportからの入力。
私の質問です:私は、配列のすべての部分を反復処理と仮定すると、
、アレイの終了前の任意の時点で(\0
のように)0
を使用することが安全ですか?仮定すると、私は:
- は真ん中の文字列(を反復して
int
配列のようにそれを使用して)でそこに何が起こっているかの知識で - とまさにこのランダム\ 0をとして、それを処理していませんそれは意味するはずです。
私はいくつかの同僚に、状況のいかんにかかわらず、最後までに\0
を含む文字配列を使用するべきではないことを伝えてくれたからです。
私のコードは現在、期待どおりに動作しますが、後で問題が発生するかどうかはわかりません。
この動作を回避するために書き直すことは、ほんのわずかな作業です。
文字列関数( 'strcpy'、' strcat'など)は決して問題ではないと思います。 –
あなたの主な問題は 'tmp [i] == 250 'である。 tmpがcharの場合は、符号付きか符号なしかは不定です。それが署名されていれば、その文は-128と127の間でなければならないので真ではありません –
@TomTannerそれはcharが常に符号なしであることを示しています。 – Magisch