Почему компилятор выдает: предупреждение: присваивание делает целое число из указателя без приведения - PullRequest
1 голос
/ 25 октября 2019

Я пытаюсь поместить некоторую информацию в массив двумерных символов. Я помещаю список имен в стандартный ввод, который я пытаюсь поместить в массив с номером, соответствующим массиву символов (имен). По какой-то причине, когда я пытаюсь напечатать имена, он выводит несколько случайных символов.

 #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;
};

1 Ответ

4 голосов
/ 25 октября 2019

Это утверждение

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

неверно.

По крайней мере, вы имеете в виду

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

Для этого необходимо включить заголовок

#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]);
...