gpt4 book ai didi

c - 从指针传递的结构显示错误的值

转载 作者:行者123 更新时间:2023-11-30 18:44:58 25 4
gpt4 key购买 nike

我有一个变量structEmployee,我使用malloc在堆上初始化了它。我使用 *tmp 从指针传递此变量,如下所示。问题在于,传递给函数的变量值是错误的。我认为这与指针有关,但我找不到错误。我想我忘记了关于指针的基本知识。对我来说,我正在传递由 *tmp 指向的变量structEmployee(而不是像传递指针那样传递它的地址)。看不出那里有什么问题。

如果我检查 createEmployee() 函数内或调用该函数后的值,它们是正确的,但它们不在 isInformationValid(employee e) 中。如果我更改代码并将指针传递给该函数,则一切正常。

typedef struct employee{
char nom[MAX_NAME_LEN];
char prenom[MAX_NAME_LEN];
unsigned short badge;
unsigned long secret;
time_t lastAccess;
} employee;

typedef struct maillon maillon;
struct maillon{
maillon* next;
maillon* prev;
employee* e;
};

typedef struct e_list{
maillon* m;
} e_list;
[...]
int isInformationsValid(employee e){
int invalidName = (strlen(e.nom) <= 2 || strlen(e.prenom) <= 2); // Problem here
int invalidBadge = (e.badge < 1000 || e.badge > 9999); // Problem here. e.badge taken as "25789" when I input "1010"
if(invalidName) { errno = EPERM; perror("Name length must be > 2"); return -1; }
if(invalidBadge) { errno = EPERM; perror("Badge must be 4 digits"); return -1; }
return 0;
}

employee* createEmployee(){
employee* tmp = calloc(1, sizeof(employee*));
getString("A man needs a last name : ", tmp->nom, MAX_NAME_LEN);
getString("A man needs a first name : ", tmp->prenom, MAX_NAME_LEN);
getDigits("Badge (4 digit) : ", &tmp->badge, "%hu");
getDigits("Secret : ", &tmp->secret, "%lu");
time_t t = time(NULL);
tmp->lastAccess = t;
if(isInformationsValid(*tmp) == -1){ // Passing addr of the struct
return NULL;
}
return tmp;
}

我错过了什么?我在初始化中是否做错了什么,或者我是否遗漏了有关指针的基本知识?

我看到stackoverflow上的其他问题也有类似的问题

我能读到的其他问题的唯一答案是忘记了堆上的动态分配,这就是我认为我正在做的事情(也许是错误的方式)。

编辑

我做错了。

最佳答案

您正在分配employee * 的大小,但您应该分配employee(或*tmp)的大小。

关于c - 从指针传递的结构显示错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56022384/

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