为什么编译器会发出:警告:赋值从指针生成整数而不进行强制转换

Why does the compiler issue : warning: assignment makes integer from pointer without a cast

我正在尝试将一些信息放入二维字符数组中。我在 stdin 中放入了一个名称列表,我试图将其放入一个数组中,其中的数字对应于字符数组(名称)。出于某种原因,当我尝试打印名称时,它会输出一些随机字符。

 #include <stdio.h>
#define NAME_MAX_LENGTH 20
#define NUM_MIN_PLAYERS 2
#define NUM_MAX_PLAYERS 20

struct PlayerList {
    unsigned int num_players;
    char name[NUM_MAX_PLAYERS][NAME_MAX_LENGTH + 1];
};

int main()  {
    int num;
    char nom[NAME_MAX_LENGTH + 1];
    struct PlayerList player;

    while(fgets(nom, sizeof nom, stdin) != NULL){
    char longueur = 0;
    player.name[num++][sizeof nom] =  nom;
    printf("%d:%s\n", num, player.name[num]);
    }
    player.num_players = num;


    return 0;
};

此声明

player.name[num++][sizeof nom] =  nom;

不正确。

至少你的意思是

strcpy( player.name[num++], nom );

为此,您需要包括 header

#include <string.h>

否则表达式

player.name[num++][sizeof nom]

的类型为 char 而右侧表达式 nom 的类型为 char *.

也是这个输出

printf("%d:%s\n", num, player.name[num]);

具有未定义的行为,因为变量 num 已经在上面的语句中递增

player.name[num++][sizeof nom]
            ^^^^^

你至少应该写

printf("%d:%s\n", num - 1, player.name[num-1]);