-PR-
解決済み

ループを使用して変数に格納したい

  • 困ってます
  • 質問No.63527
  • 閲覧数53
  • ありがとう数3
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 12% (35/274)

====宣言=====
typedef struct{
int a;
int b;
int c;
}ABC;
typedef struct{
int d; //e配列の個数
ABC e[10];
}DEF;
char vvv[BUFSIZ];
====宣言=====
上記宣言がされている場合、
vvvにカンマ編集でa,b,c,a,b,c・・・
というデータをsprintfでdの数分代入したい
のですが、何か良い方法はありませんでしょうか?
よろしくお願いします。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル14

ベストアンサー率 24% (612/2465)

main() {
int i;
DEF def;

/*defの構造体にデータの代入*/

memset(vvv, \0, BUFSIZ);
for(i=0; i<def.d; i++) {
sprintf(&www[strlen(www)], "%d,%d,%d,", def.e[i].a, def.e[i].b, def.e[i].c);
}
/* 最後のカンマを消す */
www[strlen(www)-1] = \0;
}

これでどうでしょう?
本当なら、もっとエラー処理が必要ですが、とりあえず代入部だけ。
検証してないので、バグるかも。。。。
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.5
レベル2

ベストアンサー率 0% (0/1)

回答への補足です。

データを vvv 格納する際に vvv[] の先頭アドレスから前回まで格納されたデータ分だけずらしたアドレスにデータを格納しなければなりません。
sprintf は入力された文字列のバイト数を返すのでその値を offset に足していき、vvvの先頭アドレスからのずれとして利用しています。
一番最初のデータの格納ではもちろんvvvの先頭からの格納となるので offset = 0として、その後は格納されたデータ分だけずれていくという具合です。


  • 回答No.4
レベル2

ベストアンサー率 0% (0/1)

DEF def; と仮定

int i;
int offset;
char vvv[BUFSIZ];

if( def.d < 10 )
{
offset = 0;
for(i = 0; i < d; i++)
{
offset += sprintf(vvv + offset,"%d,%d,%d,",def.e[i].a,def.e[i].b,def.e[i].c);
}
}

でどうでしょうか?
お礼コメント
sting

お礼率 12% (35/274)

すみません、初心者なもので、少し解説していただけませんか?
投稿日時 - 2001-04-17 12:21:17
  • 回答No.2
レベル13

ベストアンサー率 37% (570/1525)

少しだけ違うやり方(やってることは同じです)。

if (d > 0) {
sprintf(vvv, "%d, %d, %d", def[0].a, def[0].b, def[0].c) ;
}
for (i = 1 ; i < d ; i++) {
sprintf(vvv, "%s, %d, %d, %d", vvv, def[i].a, def[i].b, def[i].c) ;
}

dが1以上を保証されていればif文なしでsprintf()しても可。

sprintf()以外の関数呼び出しを避けてチョットだけスピードアップしてみました。
  • 回答No.3
レベル9

ベストアンサー率 30% (25/81)

#2のfor文の中のsprintfでvvvをvvvに転送するのは、スピードダウンになるのではありませんか?
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ