« ArduinoをRaspberryPiとSPIでつなぐ | トップページ

2018年11月23日 (金)

地味な話 ナル文字 strlenの注意

つまらぬ間違い。
テストデータとして用意したcharの配列の長さが、"\0"が入る場所を考慮していなかった。

#define BUFFSIZE 8  //配列のサイズ

//こんな配列を用意して文字列で初期化
char testdata[][BUFFSIZE] = {
     "abcdefg\n"
     "hij\n"
};

//そのあとstlenを実行してみた。
printf("%d : %s \n",strlen(recvdata[0]), recvdata[0]);


そうしたら、

12 : abcdefg\n
hij\n

という結果になってしまった。
これは文字列の最後に"\0"がないために起こる不具合。

strlenは8になるはずであるが、一個目の文字列末尾に"\0"が入っていなかったために正しい長さが出せていない。

配列の初期化で、""の後には自動的に"\0"を入れてくれるのであるが、配列の長さが1個足りないために一個目の文字列は"\0"がない。そして二個目の文字列でようやく"\0"が入ることになった。

その結果、二つの文字列がつながってしまうことになった。

正しく動作させたければ、

char testdata[][BUFFSIZE] = {
     "abcdef\n"
     "ghij\n"
};

« ArduinoをRaspberryPiとSPIでつなぐ | トップページ

C言語」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/518723/67411410

この記事へのトラックバック一覧です: 地味な話 ナル文字 strlenの注意:

« ArduinoをRaspberryPiとSPIでつなぐ | トップページ