gpt4 book ai didi

C - 返回结构时出错

转载 作者:行者123 更新时间:2023-11-30 20:23:27 25 4
gpt4 key购买 nike

我有这个头文件:

typedef char *cadena;
typedef struct user_t user;
struct user_t {
cadena login;
cadena name;
};
typedef struct user_t user_t;

现在在主程序中我这样做:

#include "HeaderFile.h"

user createUser();

main() {
user usuario;
usuario = createUser();
printf("%s\n", usuario.name); //This DOES NOT work
exit(0);
}

user createUser() {
user usAux;
char in_login[50], in_name[50];
printf("\nWrite the user");
scanf("%s", &in_login);
usAux.login = in_login;
printf("\nWrite the name");
scanf("%s", &in_name);
usAux.name = in_name;
printf("%s\n", usAux.name); //This WORK
return usAux;
}

在 createUser() printf 中,名称显示正确,但在第二个 print(顶部 printf)中仅显示“@”。理论上,我正在创建一个用户变量并将其分配给一个相同类型的变量,但看起来这个过程中发生了一些变化。

有什么想法吗?

最佳答案

在函数CreateUser中,您将指向本地数组的指针存储到本地结构usAux。当您按值返回此结构时,这些指针只会被复制到目标结构。它们仍然指向已返回的被调用函数中的自动数组。取消引用它们会调用未定义的行为。您可能应该分配这些字符串。

请注意,将指针隐藏在 typedef 后面是一个基本想法,隐藏指针不会使问题消失,实际上会使问题更有可能发生。

这是您代码的修改版本:

#include "HeaderFile.h"

user createUser(void);

int main(void) {
user usuario;
usuario = createUser();
printf("%s\n", usuario.name);
free(usuario.name);
free(usuario.login);
return 0;
}

user createUser(void) {
user usAux;
char in_login[50] = "", in_name[50] = "";

printf("\nWrite the user: ");
scanf("%49s", &in_login);
usAux.login = strdup(in_login);

printf("\nWrite the name: ");
scanf("%49s", &in_name);
usAux.name = strdup(in_name);

return usAux;
}

关于C - 返回结构时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104063/

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