OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

ダブルポインタ?

  • すぐに回答を!
  • 質問No.156572
  • 閲覧数365
  • ありがとう数0
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 12% (35/274)

下記のような関数が存在し、
最終的には mainで宣言した変数 "a"
にDataGetでコピーしたデータを
mainで再び使用したいのですが、
下記の方法だとmainに何も帰ってきません。
(NULLのまま・・・)
下記の関数を使用しmainに上手くデータを
引き継ぐためにはどうすれば良いのでしょうか?

void Mem(int nSize,void **ptr){

char *tmp;

tmp = malloc(nSize);

*ptr = tmp;
}

void DataGet(char *aa,char *a){

int nSize = 5;

(void)Mem(nSize,(void **)&a);

memcpy(a,aa,nSize);

return;
}

void main(){

char aa[20];
char *a = 0x00;

memset(aa,0x00,20);

memcpy(aa,"test",4);

(void)DataGet(aa,a);

/* aデータをここから再び使いたい */

}
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

惜しいなあ。

DataGet() → Mem() では、きちんとポインタのポインタを使っているのに。
同じことを main() → DataGet() でもしなくては駄目ですよ。

これだけで、もう分ったとは思いますが、念の為。

void DataGet(char *aa,char **a) ※
{
int nSize = 5;
(void)Mem(nSize,a); ※
memcpy(*a,aa,nSize); ※
return;
}

void main()
{
char aa[20];
char *a = 0x00;

memset(aa,0x00,20);
memcpy(aa,"test",4);
(void)DataGet(aa,&a); ※

/* aデータをここから再び使いたい */
printf("'%s'\n", a);
}

# 不要なキャストや main() の戻り値が void になってる、とかいろいろ
# 気になるところはありますが、そのままにしてあります
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

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

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

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ