• ベストアンサー

C言語でchar配列の追加

C言語について質問させていただきます. unsigned char send_data[]; 上記の配列の double d1 = 15.23; double d2 = 14.21; double d3 = 20.56; 上記3つのdouble変数を間に , を入れて連結して代入したいと考えています. 結果はsend_data = "15.23,14.21,20.56"となってほしいです. ポインターなどを使用すれば上記は実現できますでしょうか? お分かりになられる方がいらっしゃいましたら,何卒ご教授よろしくお願い致します.

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

  • ベストアンサー
  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.2

double d1 = 15.23; double d2 = 14.21; double d3 = 20.56; まず、小数点以下は2進数では表せません。 #include <stdio.h> #include <stdlib.h> void main() { unsigned char *send_data; double d1 = 15.23; double d2 = 14.21; double d3 = 20.56; send_data = (unsigned char*)malloc(sizeof(char)*100); sprintf(send_data,"%f4.2,%f4.2,%f4.2",d1,d2,d3); printf("%s",send_data); } 結果は 15.2300004.2,14.2100004.2,20.5600004.2 こうなります。

con014057
質問者

お礼

ご回答ありがとうございます. ご提示いただいたコードでほぼ,所望の結果を得ることができました. ただ,コンパイラの違いなのか,unsigned char *send_dataではエラーが出たため, unsigned char send_data[]に変更し,mallocをなくして実行すると問題なく動作致しました. ありがとうございました.

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.1

unsigned char send_data[32]など、 send_dataが"15.23,14.21,20.56"を設定できるだけの領域確保されているならできます。 sprintfやsnprintfを調べてみてください。

con014057
質問者

お礼

ご回答ありがとうございます. sprintfを用いて動作するようになりました.

関連するQ&A

  • C言語でunsigned char配列を連結する方法ってありますか?

    C言語でunsigned char配列を連結する方法ってありますか? 例えば unsigned char test[]={0x00,0x02,0x03}; unsigned char test2[]={0x05,0x06}; という配列があったとして test[]という配列のあとにtest2の配列を追加することは可能でしょうか? {0x00,0x02,0x03,0x05,0x06}という配列になればOKです。 よろしくお願いします。

  • char型のポインタ配列に変数の値の代入できる?

    c言語でchar型のポインタ配列に変数の値を代入できるのでしょうか? 例えば int A[10]={1,2,3,4,5,6,7,8,9,10}; char *C[10]; のCに配列Aの中のデータを文字列として入れたいのです。 C[0]="A[0]"としてもA[0]という文字列が代入されてしまうだけなので… よろしくお願いします。

  • long型のデータをバイト型の配列に代入する方法

    long型のデータを配列を使って1byte毎に分けたい処理を作りたいのですが、 やりかたとしてはlong型のアドレスをポインタ変数に渡して、 ポインタ変数をバイト配列に代入する方法になりますでしょうか? 具体的なプログラムはこんな感じと考えてますが unsigned long LONG: unsigned char AAA[8], *pon, i: pon = &LONG for(i=0 i<8 i++) { AAA[i] = *pon + i; } C言語に詳しい方教えてください、よろしくお願いします。

  • C言語の配列のサイズ

    二次元配列、三次元配列のサイズが知りたいです。 unsigned char test1[100]; は sizeof( test1 )で100ですが、 unsigned char test1[100][30]; はどのように書いたら100または、30なのか知りたいです。 unsigned char test1[100][30][5]; これも100,30,5のサイズをそれぞれ得る方法が知りたいです。 因みに以下のような数値なし[]を見たことがあるのですが どういう意味でしょうか? unsigned char test1[][30]; サイズを理解していないのは、ポインタを理解していないと同じことでしょうか?今更ながら自分自身が不安です。

  • C言語の配列の扱い

    次のような配列bufと変数dataを宣言して bufの中身をdataにコピーしたいのですが、 buf[0]のみで、buf[1]の値が入りません。 具体的には、buf[0]には16進数で0x3f、 buf[1]には0x3aが入っていて、 dataの値を0x3a3fにしたいのです。 教えてください。 ***************************** unsigned char buf[2]; unsigned short data; data = (unsigned short)*buf; *****************************

  • C言語の配列とポインタについて

    C言語の配列とポインタについてわからないことがあります。 以下のソース例は、10個の値の平均値を求めるプログラムです。 コメントを挟んだ部分が疑問点です。 【ソース例】 #include <stdio.h> int getaverage(int *data); int main(void) { int average,array[10] = {15,78,98,15,98,85,17,35,42,15}; average = getaverage(array); printf("%d\n",average); return 0; } int getaverage(int *data) { int i,average = 0; for (i = 0;i < 10;i++) { average += data[i]; /*ポインタ変数なのに? */ } return average / 10; } 【実行例】 49 このdata[i]はポインタ変数であり、 配列arrayの i 番目の要素であるarray[i]の"アドレス" が代入されているはずだと思うのですが、 なぜ通常の整数変数であるaverageと数値計算が出来、正しい結果が出たのでしょうか? あたかもdata[i]には、 array[i]の"アドレス"ではなく、 array[i]の"メモリの中身"が代入されているようです。 どういうことでしょうか? 回答よろしくお願いします。

  • charの操作について

    お世話になります、フジと申します。 今回皆様にお聞きしたいことはchar型変数の操作についてなのですが、次のプログラムのようにchar型に代入した整数を16進数用に変換させ、最後に同じchar型の変数に代入したいと考えています。 int a,b,c; char data = 48; //dataに10進数48を代入 c = (int)data; //ここでcは48になる a = c/16;          //16進数用に変換 b = c%16; c = 10*a + b;        //ここでcは30になる このint型変数c(30)をchar型変数dataに代入するにはどうしたらいいでしょうか? char buf[5]; sprintf(buf,"%d",c); にすればchar型の配列に代入することは出来ますが、これだとcの値30がbuf[0]=3,buf[1]=0となってしまい、目的の操作が達成できません。 よい方法をしっている方がいましたら、宜しくお願い致します。

  • C言語Char型配列に小数値を入れる方法

    C言語Char型配列に小数値を入れる方法について質問なんですが、 分からなく質問させていただきました。 (例)23.8を float f = 23.8 char c[100]; cの配列の中に23.8を入れる c[0] = '2' c[1] = '3' c[2] = '.' c[4] = '8' c[5] = '\0' 上記みたいに入ってほしいんですが、そういうC言語の関数ありますか? itoaやsprintfを使わないでお願いします。

  • c言語のポインタ配列

    下記のようなポインタ配列が合った場合、 char *mnthp[4] = { "January", "February", "March", "April" }; Februaryに別の文字列を代入したいのですが、どうすればよいのでしょうか?

  • c言語 int型の数字をchar型の配列に

    c言語についてです。 int型の数字をchar型の配列に入れたいです。 関数に対してint型の数字を文字列として渡し、 関数内でchar型の配列に格納したいです。 例として、 a(char a[]){  ~~  ~~ } int main(void){ int x = 5678;  ~~  a(x); } とできるようにしたいです。 しかしこれだと5678という値がそのままchar型の一つの配列に入る?ため正しくないです。 欲しい結果としてはちゃんとa関数内で、 a[1] = '5' a[2] = '6' a[3] = '7' a[4] = '8' となってほしいです。 もともと渡す値が”5678”となっていれば結果は正しく出るのですが、 渡す値がint型と決まっているためどうにかして5678を”5678”とすればいいのではないかと考えています。 つまり5678を単純に文字列に変換すればいいのでしょうか? またプログラム内ではsprintfやatolを使用しないで実現させたいです。 難しいかもしれませんがお願いします。 なんだか説明が下手ですみません。 お願いいたします。