C 我能';t将指针声明为全局变量

C 我能';t将指针声明为全局变量,c,pointers,C,Pointers,我正在尝试运行这个管理登录的程序,但是我在将这个指针声明为全局变量时遇到了一个问题,它显示的错误是 “初始值设定项元素不是常量” #包括 #包括 #包括 类型定义结构{ char nom_Usilizateur[20]; char mot_de_passe[20]; 字符名称[20]; char-prenom[20]; }用户; USER*u=(USER*)malloc(sizeof(USER)*20); int nbr_usr=0; void adduser(){}; ...... 在C语言中

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

#包括
#包括
#包括
类型定义结构{
char nom_Usilizateur[20];
char mot_de_passe[20];
字符名称[20];
char-prenom[20];
}用户;
USER*u=(USER*)malloc(sizeof(USER)*20);
int nbr_usr=0;
void adduser(){};
......

在C语言中,在初始化全局变量时不能调用函数

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

...
USER *u;
...
int main()
{
   u = malloc(sizeof(USER)*20);
   ...
}
顺便说一句:

  • 您不需要强制转换
    malloc
    的结果
  • 变量名
    u
    不是一个好主意。给它一个有意义的名称,例如
    用户
  • 与您的问题没有直接关系,但请注意,下面结构声明中的
    20
    malloc(sizeof(USER)*20)
    中的
    20
    完全没有关系

    在这个
    struct
    声明中,
    20
    意味着每个用户的密码、nom、prenom等最多可以有19个长度,因为字符串以NUL结尾


    malloc(sizeof(USER)*20)
    中的
    20
    表示最多可以有20个用户。

    在C中,在初始化全局变量期间不能调用函数

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

    ...
    USER *u;
    ...
    int main()
    {
       u = malloc(sizeof(USER)*20);
       ...
    }
    
    顺便说一句:

  • 您不需要强制转换
    malloc
    的结果
  • 变量名
    u
    不是一个好主意。给它一个有意义的名称,例如
    用户
  • 与您的问题没有直接关系,但请注意,下面结构声明中的
    20
    malloc(sizeof(USER)*20)
    中的
    20
    完全没有关系

    在这个
    struct
    声明中,
    20
    意味着每个用户的密码、nom、prenom等最多可以有19个长度,因为字符串以NUL结尾


    malloc(sizeof(USER)*20)中的
    20
    表示最多可以有20个用户。

    问题不在于声明。 问题是您正在使用运行时信息初始化指针。 将
    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;
    }
    
    #包括
    #包括
    #包括
    类型定义结构{
    char nom_Usilizateur[20];
    char mot_de_passe[20];
    字符名称[20];
    char-prenom[20];
    }用户;
    用户*u;
    int nbr_usr=0;
    void adduser(){};
    void initialize(){
    u=(用户*)malloc(用户数量)*20);
    //在这里进行所有其他初始化
    }
    int main(){
    初始化();
    返回0;
    }
    
    问题不在于声明。 问题是您正在使用运行时信息初始化指针。 将
    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;
    }
    
    #包括
    #包括
    #包括
    类型定义结构{
    char nom_Usilizateur[20];
    char mot_de_passe[20];
    字符名称[20];
    char-prenom[20];
    }用户;
    用户*u;
    int nbr_usr=0;
    void adduser(){};
    void initialize(){
    u=(用户*)malloc(用户数量)*20);
    //在这里进行所有其他初始化
    }
    int main(){
    初始化();
    返回0;
    }
    
    您提供的不是声明本身,而是初始化。在C语言中,函数外部的代码无法执行,您必须将
    malloc
    放在函数内部。(并且不要使用
    malloc
    )你需要一个
    main()
    。另外,请浏览帮助页面,学习如何提问。我们通常需要更多关于你正在做什么的信息。特别是一个完整的最小代码示例。它不是声明本身,而是您提供的初始化。在C语言中,函数外部的代码无法执行,您必须将
    malloc
    放在函数内部。(并且不要使用
    malloc
    )你需要一个
    main()
    。另外,请浏览帮助页面,学习如何提问。我们通常需要更多关于你正在做什么的信息。特别是一个完整的最小代码示例。