gpt4 book ai didi

c - 函数如何设置 C 中的结构并从中获取信息

转载 作者:太空狗 更新时间:2023-10-29 15:50:03 27 4
gpt4 key购买 nike

我编写了以下代码,我试图通过 get 和 set 函数设置并从结构中获取信息。但是,当我编译并运行该程序时,它不会显示从输入中获取的信息。我的错在哪里?

#include <stdio.h>
#include <stdlib.h>

typedef struct Information{
int _id;
char* _name;
char* _family;
} Information;

void setInformation(Information* arg_struct){
printf("What is your name? ");
scanf("%s %s", arg_struct->_name, arg_struct->_family);
printf("What is your id? ");
scanf("%d", &arg_struct->_id);
}

void getInformation(Information* arg_struct){
printf("Your name is %s %s.\n", arg_struct->_name, arg_struct->_family);
printf("Your id is %d.\n", arg_struct->_id);
}

int main(int argc, char const *argv[]){
Information *obj = malloc(sizeof(Information));

setInformation(obj);
getInformation(obj);

return 0;
}

最佳答案

你调用一个 UB 因为 _name & _family 是指向你不拥有的内存的指针(因为你没有 malloced它)

尝试将其更改为

typedef struct Information{
int _id;
char _name[SOME_SIZE_1];
char _family[SOME_SIZE_2];
}Information;`

或者,如果你想继续使用指针而不是数组,你应该在使用指针之前对其进行 malloc,因此在你的 set 函数中,添加 2 个 malloc 语句:

void setInformation(Information* arg_struct){
arg_struct->_name = malloc(SOME_SIZE_1);
arg_struct->_family = malloc(SOME_SIZE_2);
printf("What is your name? ");
scanf("%s %s", arg_struct->_name, arg_struct->_family);
printf("What is your id? ");
scanf("%d", &arg_struct->_id);
}

但是如果你正在分配内存,不要忘记在完成后释放它

关于c - 函数如何设置 C 中的结构并从中获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43961360/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com