• ベストアンサー

文字列処理

513404250001969199219952002000340000134300003405001343730… 上のような文字列をバイト数を指定して分割するプログラムを以下の様に書いたところ画像の様な結果になってしまいます。NULL文字が関係しているのではと思い、分割後の文字列にNULL文字を付与してみましたが解決しません。ご指導よろしくお願いします。 【プログラム】 int head(char *hd){ 44 #define knum 6 45 #define ini 23 46 char splith[knum][9]; 47 char null[2]={'\0'}; 48 int dev[knum] = {3,3,7,7,7,7}; 49 int i; 50 int sum; 51 sum = ini; 52 for(i=0;i < knum;i++){ 53 //printf("%d\n",dev[i]); 54 //printf("%d\n",sum); 55 strncpy(&splith[i][0],hd + sum,dev[i]); 56 strcat(&splith[i][0],null); 57 printf("%d is %s\n",i,&splith[i][0]); 58 sum += dev[i]; 59 } 60 }

質問者が選んだベストアンサー

  • ベストアンサー
  • jgk
  • ベストアンサー率75% (104/138)
回答No.2

strncpyは指定した字数コピー出来た場合は、'\0'を付加しないため、 '\0'を付加する必要がありますが、 strcatは文字列中の'\0'で文字列の終端の判断しそこから文字列をくっつけるので、'\0'が付いてないものには使えません。 splith[i][dev[i]] = '\0'; として、自分で'\0'を付加してやる必要があります。

Falcon2
質問者

お礼

回答ありがとうございます。さっそく試してみようと思います。

Falcon2
質問者

補足

教えていただいたとおりにやりましたら、期待通りの結果が得られました。 まだ知らないことが多いなと痛感しました。もっと勉強していきたいと思います。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kent_a
  • ベストアンサー率18% (36/199)
回答No.1

char splith[knum][9];を初期化したらどうですか? memset(&splith[0][0],sizeof(splith),0x00);

すると、全ての回答が全文表示されます。

関連するQ&A