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()
。另外,请浏览帮助页面,学习如何提问。我们通常需要更多关于你正在做什么的信息。特别是一个完整的最小代码示例。