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

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

最佳答案

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

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

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

顺便说一句:

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

与您的问题没有直接关系,但请注意下面结构声明中的 20malloc(sizeof (用户)*20)

typedef struct {
    char nom_utilisateur[20];
    char mot_de_passe[20];
    char nom[20];
    char prenom[20];
} USER;

在此struct 声明中,20 表示每个用户的密码、nom、prenom 等的长度最多为19,19 是因为字符串以NUL 结尾。

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

关于c - 我不能将指针声明为全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53444840/

相关文章:

c - 如何针对 2 个节点之间的单个最短路径优化 Dijkstra 算法?

c - STM32 相同的 while 循环代码但编译为不同的汇编代码

java - 如何复制二维字符串数组?

c++ - 我什么时候应该在智能指针上使用原始指针?

c - 为什么 printf() 在使用指针时绕过分段失败?

c++ - 如何避免公共(public)头文件中#define 的编译时间过长

c - 我的 if, else, else if 循环在 C 中不起作用?

c - 有没有办法遍历多个结构,比如通过一个数组?

C 如何终止 char 的指针

c++ - 获取指向 std::list 或 std::forward_list 中节点的指针