我不能将指针声明为全局变量

时间:2018-11-23 10:23:00

标签: c pointers

我正在尝试运行管理登录的程序,但是将这个指针声明为全局变量时遇到了问题,它显示给我的错误是 “初始化元素不是恒定的”

#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() {};
 ......

2 个答案:

答案 0 :(得分:2)

在C语言中,您无法在全局变量初始化期间调用函数。

您需要在main中进行初始化:

...
USER *u;
...
int main()
{
   u = malloc(sizeof(USER)*20);
   ...
}

顺便说一句:

  1. 您不需要强制转换malloc的结果。
  2. 变量名u不是一个好主意。给它起一个有意义的名称,例如users

与您的问题没有直接关系,但是请注意,以下结构声明中的2020中的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;
}