我正在尝试运行管理登录的程序,但是将这个指针声明为全局变量时遇到了问题,它显示给我的错误是 “初始化元素不是恒定的”
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char nom_utilisateur[20];
char mot_de_passe[20];
char nom[20];
char prenom[20];
}USER;
USER *u =(USER *)malloc(sizeof(USER)*20);
int nbr_usr=0;
void adduser() {};
......
答案 0 :(得分:2)
在C语言中,您无法在全局变量初始化期间调用函数。
您需要在main
中进行初始化:
...
USER *u;
...
int main()
{
u = malloc(sizeof(USER)*20);
...
}
顺便说一句:
malloc
的结果。u
不是一个好主意。给它起一个有意义的名称,例如users
。与您的问题没有直接关系,但是请注意,以下结构声明中的20
与20
中的malloc(sizeof(USER)*20)
根本无关。
typedef struct {
char nom_utilisateur[20];
char mot_de_passe[20];
char nom[20];
char prenom[20];
} USER;
在此struct
声明中,20
表示每个用户的密码,标称值,前置词等的长度最多为19,因为字符串以NUL终止,所以长度为19。
20
中的malloc(sizeof(USER)*20)
意味着您最多可以有20个用户。
答案 1 :(得分:1)
问题不在于声明。
问题在于您正在使用运行时信息初始化指针。
将malloc
视为只能在程序实际运行时才能执行的东西。这些东西必须放在函数中。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char nom_utilisateur[20];
char mot_de_passe[20];
char nom[20];
char prenom[20];
}USER;
USER *u;
int nbr_usr=0;
void adduser() {};
void initialize(){
u = (USER *)malloc(sizeof(USER)*20);
//do all the other initializations here
}
int main(){
initialize();
return 0;
}