- ベストアンサー
C言語のプログラミング 配列について
C言語の課題でわからないところがあって困ってます。ちなみに初心者です。 int i; //添え字 for(i=0;i<○;i+=16){ //○はデーター数 a[2*i]=b[i]; a[2*i+1]=b[i+1]; a[2*i+2]=b[i+2]; a[2*i+3]=b[i+3]; : a[2*i+15]=b[i+15]; a[2*i+16]=c[i]; a[2*i+17]=c[i+1]; a[2*i+18]=c[i+2]; a[2*i+19]=c[i+3]; : a[2*i+31]=b[i+15]; } という風な配列がありまして、これをすっきりまとめたいのですが どうもエラーか配列aにNULLばかりはいってしまって上手くいきません。 どうすればよいのか教えてください。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>ちなみに初心者です。 なので、かなり推定入ってますが・・・・ まず、思い通りに動いてくれないことについて >for(i=0;i<○;i+=16){ //○はデーター数 ここは、 for(i=0;i<○;i++){ こうではないですか? やりたいことがどういうことか、かかれていないので思いっきり推定です。 #ねぇ、#1さん。 あと、「すっきりまとめたい」について、「すっきり」の価値観は結構人によって違いますので、これまたお気に召しますかどうか・・・ 私ならこんな感じです。 for(.........){ memcpy( &a[i*2], &b[i], sizeof(b)*16 ); memcpy( &a[i*2+16], &c[i], sizeof(c)*16 ); };
その他の回答 (4)
- nagare
- ベストアンサー率33% (280/831)
>どうもエラー ・aの配列の領域は大丈夫ですか? iが2であれば、aは64個必要 ・for(i=0;i<○;i+=16)だと、代入する箇所がおかしくなっていきます >NULLばかりはいってしまって ・b,cにデータを入れてます? ・for(i=0;i<○;i+=16)だと、参照する箇所がおかしくなっていきます >これをすっきりまとめたいのですが memcpyを使ったら すっきりしますが。。。(好みですけどね) int datasize=32; int blocksize=16; for (cnt=0; cnt<datasize/blocksize; cnt++) { memcpy (&a[cnt*datasize], &b[cnt*blocksize],blocksize); memcpy (&a[cnt*datasize+blocksize], &c[cnt*blocksize],blocksize); } (No.3 さんと同じ)
お礼
・aの配列の領域は大丈夫ですか? aは#defineで128としてあります ・b,cにデータを入れてます? はいっています。 ちなみに今ポインタ配列でやっています。 いろいろとありがとうございました。早速やってみようと思います。
- timber
- ベストアンサー率29% (218/739)
a,b,cがすべてcharの配列ということでしたら、 memset(a, 0, sizeof(a)); for(i=0;i<○;i+=16){ strncat(a, &b[i], 16); strncat(a, &c[i], 16); } でどうでしょうか。
お礼
ありがとうございます。早速やってみたいと思います。
- DrSumire
- ベストアンサー率39% (264/666)
まとめるとこんな感じになるかな? int i,j; for(i=0;i<○;i++) for(j=0;j<16;j++){ a[(i*32)+j] = b[(i*16)+j]; a[(i*32)+j+16] = c[(i*16)+j]; } インクリメントを16づつやるよりも、式の方で調整をしたほうが分かりやすいと思いますよ。
お礼
ありがとうございます。早速やってみたいと思います。
- ro-su
- ベストアンサー率24% (19/79)
aとbとcの型はなんでしょうか? あと質問の処理をまとめると ・bとcの配列の値をaにまとめたい ・bとcは16要素ずつまとめてbのデータ→cのデータ の順に入れたい ってな感じでしょうか。
補足
a,b,cの型はchar型です。 ・bとcの配列の値をaにまとめたい ・bとcは16要素ずつまとめてbのデータ→cのデータの順に入れたい そのとうりです。16要素ずつでなくても4要素,8要素ずつとかもやっってみたいと思っています。bのデータ→Cのデータ→bのデータ→Cのデータという具合です。よろしくお願いします。
お礼
ありがとうございます。早速やってみたいと思います。