- ベストアンサー
ゼロを含む文字列の連結方法
初歩的な質問かもしれませんが、お願いします。 ゼロが連続する文字列を連結させて、ひとつの文字列にしたいのですが、strcpyとstrcatの組み合わせでは、00があった時点でこの部分が抜けてしまいます。ゼロを含む完全な形で連結する方法をお願いします。 例: 文字列A:「0001」と文字列B:「0055」と文字列C:「00AA」を連結して、 文字列X:「0001005500AA」を作りたいのです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
char buf[100]; char a[100]="0001"; char b[100]="0055"; char c[100]="00AA"; … sprintf(buf, "%s%s%s", b, c); はい、これでbufに"0001005500AA"がセットされました。 これじゃいけないの? この質問は、説明が飛んでいるように思えます。 > 文字列A:「0001」と文字列B:「0055」と文字列… 文字列連結以前に、0001や0055が得られていないまま連結しているような気がします。 おそらく4桁の前ゼロ16進数の作り方が悪いのだと思いますがねぇ…。 "%04X"の型変換を指定したのですか? "%X"指定ではゼロが飛んで当たり前でしょう。 char buf[100]; int a, b, c; … sprintf(buf, "%04X%04X%04X", a, b, c); とすればbufに4桁前ゼロの16進数がセットされますよ。
その他の回答 (4)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>strcpyとstrcatの組み合わせでは、00があった時点でこの部分が抜けてしまいます ということから、データとして'\0'を含みそれごと連結したいということなんでしょうが、'\0'が頭にある時点で、Cでは、それを文字列とは言いません。 char a[4]={0,0,0,1}; char b[4]={0,0,5,5}; cahr c[4]={0,0,0xA,0xA}; char cat[12]; for(int i=0;i<4;i++){ cat[0+i]=a[i]; cat[4+i]=b[i]; cat[8+i]=c[i]; } とかすればいいと思うけど・
お礼
sprintfで解決しました。ありがとうございました。
- kokorone
- ベストアンサー率38% (417/1093)
数字の0と、文字の0は違いますよ。 char *str_a = {"0001"}; char *str_b = {"0055"}; char *str_c = {"00AA"}; char str_x[300]; memclr(str_x,300,0); str_x = strcpy(str_x,str_a); str_x = strcat(str_x,str_b); str_x = strcat(str_x,str_c); で出来ませんかねぇ?
補足
sprintfで解決しました。ありがとうございます。
- rinkun
- ベストアンサー率44% (706/1571)
文字列? 文字列"0001"、"0055"、"00AA"を結合するということなら別にstrcpyやstrcatで困ることはないですね。 やりたいのはchar配列に入ったバイナリデータ列の結合ということかな。それならmemcpyを使えばできるかと思うけど、データの保持形態が分からないと確かなことは言えないですね。 問題点をもう一度確認して正しい表現で説明されることを期待します。
お礼
spirntfで解決しました。ありがとうございました。
- MasamiH
- ベストアンサー率21% (13/61)
ゼロが0x30の文字であればstrcpy/cat で扱えませんか。 sprintf()などのint->文字列変換で先行ゼロを指定していないとか?
補足
sprintfで解決しました。ありがとうございました。
お礼
sprintfで作れました。ありがとうございます。 文字列から16進数に変換したり、また変換し直したりしていまして、頭がこんがらがってしまいました。 質問の説明不足で申し訳ありません。