プロが教えるわが家の防犯対策術!

下記のような関数が存在し、
最終的には 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データをここから再び使いたい */

}

A 回答 (1件)

惜しいなあ。



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 になってる、とかいろいろ
# 気になるところはありますが、そのままにしてあります
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!