2019年1月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Amazonウィジェット

  • お気に入り
  • 書籍ランキング

AdSense

  • 広告
無料ブログはココログ

« ArduinoをRaspberryPiとSPIでつなぐ | トップページ | C言語 TCPを使ってファイルを受信するプログラム »

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"が入ることになった。

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

正しく動作させたければ、一要素は'\n'を入れて7文字までとしなければならない。BUFFSIZEをギリギリに設定しなければ済む話なのだが。。。

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

« ArduinoをRaspberryPiとSPIでつなぐ | トップページ | C言語 TCPを使ってファイルを受信するプログラム »

C言語」カテゴリの記事

コメント

コメントを書く

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

トラックバック


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

« ArduinoをRaspberryPiとSPIでつなぐ | トップページ | C言語 TCPを使ってファイルを受信するプログラム »