以下のようなC言語の構造体ポインターにおいて関数先で内容を定義するコードを書いています。
しかしながら下記コードにおけるaddStaff関数内で設定した内容がmainのstaffポインターに引き継がれず、main関数のprintfにてSegmentation fault(コアダンプ)が発生してしまいます。
参照渡しの理解が足りないのだと考えていますが、いまのところ良い参考サイトが見つけられず困っています。
ちなみに下記のコードは、staffポインターに3人の名前を定義して表示するプログラムです。
表示するのはmain関数内、人を定義するのはaddStaff関数内でお願いします。
以上、よろしくお願いいたします。
c
1#include <stdio.h> 2#include <stdlib.h> 3 4struct _staff { 5 char name[64]; 6}; 7 8void addStaff(struct _staff *staff); 9 10int main(void) { 11 int i; 12 struct _staff *staff; 13 14 printf("start\n"); 15 addStaff(staff); 16 17 printf("result\n"); 18 for(i = 0; i < 3; i++) { 19 printf("No %d, %s\n", i+1, staff[i].name); 20 } 21 22 printf("end\n"); 23 return 0; 24} 25 26void addStaff(struct _staff *staff) 27{ 28 staff = (struct _staff *)malloc(sizeof(struct _staff) * 3); 29 sprintf(staff[0].name, "akai"); 30 sprintf(staff[1].name, "aoi"); 31 sprintf(staff[2].name, "hogehoge"); 32}
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/31 01:18