seach関数で定義したstruct aaa bbbをメイン関数でも使いたいという話です。
C言語の場合、基本、無理です。
関数内で定義した変数(structも)は、関数を抜けると破棄されます。
従って参照はできません。(厳密には無効なだけなのでしばらくは残るが保証無し)
対応としては、呼び出し側で用意し、そのポインタを引数とする。
または、関数内で、malloc()等によるメモリ確保を行い、そのポインタを返す。
(その場合、後始末が必要。しないとメモリリーク)
[追記]
既に別の方の提示はありますが、、
実際のコードを書いてみました。質問文にあったコードを元にと思ったら、結構、ややこしくなりました。
呼び出し側で用意。
C
1#include <stdio.h>
2
3struct aaaTbl
4{
5 char name[7];
6 char desc[20];
7};
8
9void search(char *bbb, struct aaaTbl *ccc);
10
11//メイン関数
12main()
13{
14 char eee[] = "123abc";
15 struct aaaTbl bbb;
16
17 search(eee, &bbb);
18 printf("result : %s\n", bbb.desc);
19}
20
21void search(char *bbb, struct aaaTbl *ccc)
22{
23 strcpy(ccc->name, "name");
24 strcpy(ccc->desc, bbb);
25}
malloc()使用
C
1#include <stdio.h>
2#include <memory.h>
3
4struct aaaTbl
5{
6 char name[7];
7 char desc[20];
8};
9
10struct aaaTbl *search(char *bbb);
11
12//メイン関数
13main()
14{
15 char eee[] = "123abc";
16
17 struct aaaTbl *result = search(eee);
18
19 printf("result : %s\n", result->desc);
20 free(result);
21}
22
23struct aaaTbl *search(char *bbb)
24{
25 struct aaaTbl *result = (struct aaaTbl *)malloc(sizeof(struct aaaTbl));
26
27 strcpy(result->name, "name");
28 strcpy(result->desc, bbb);
29
30 return result;
31}
typedef
使った方が、少しスッキリでした。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/21 09:27
2019/04/22 05:38