program(array to struct)警告:赋值在没有强制转换的情况下从指针生成整数

时间:2013-10-06 01:21:41

标签: c arrays struct printf

我将使用一个程序,其中array的数据将传递给struct。但我总是得到一个警告:赋值在没有强制转换的情况下从指针生成整数。我该如何解决?

代码:

struct player_t = 
      {
       char player_name;
       char player_number;
      };

char name[], number[];
      (some code to take the input)

int x=0;

struct player_t info[] = 
    {
        info[x].player_name = name
            info[x].player_number = number
    };


    printf("%s\n%s", info[x].player_name, info[x].player_number);

3 个答案:

答案 0 :(得分:2)

player_name被声明为char,这是一个(相当小的)整数。您从name分配char[],即(相当小的)整数数组。当你使用这样的数组名称时,它会“衰减”成指向数组第一个元素的指针。

所以:

info[x].player_name = name;

正在尝试分配一个指向整数的指针,编译器觉得有必要警告你,这可能不是你想要做的。事实并非如此。但我无法弄清楚你想要做什么,所以我不能提供比编译器更好的建议。

答案 1 :(得分:2)

你有:

struct player_t = 
  {
   char player_name;
   char player_number;
  };

嗯,不,实际上你没有。 =定义的语法中没有struct,您没有提到语法错误消息。你可能有更像这样的东西:

struct player_t
{
    char player_name;
    char player_number;
};

您的结构只包含两个char成员,这些成员不足以容纳姓名或号码(除非名称仅限于一个字母,而且数字要么是一位数,要么是一个非常小的值,取决于你如何存储它)。这就是你问题的根源。

假设您希望将名称和数字都存储为字符串,则可以使char的成员 arrays ,例如:

#define MAX_LEN 50
struct player_t
{
    char player_name[50];
    char player_number[50];
};

然后,您需要使用strcpy()函数将字符串值复制到player_nameplayer_number - 或者您可以使用字符串文字初始化它们,但这不是让您在程序执行期间确定名称和编号。您还必须小心,不要尝试存储超过player_nameplayer_number可以容纳的字符串。对于第一次尝试,您可以暂时忽略该问题,直到您的程序正常运行;最终你会想要添加错误处理代码,其中包括决定在出现错误时该怎么做。

或者你可以指出它们:

struct player_t
{
    char *player_name;
    char *player_number;
};

这可以让您执行以下操作:

players[3].player_name = "Fred";

但是你必须分别为每个玩家分配名称和号码;你不能让所有玩家的player_name成员指向同一个对象。例如:

char name[30] = "Fred";
players[3].player_name = name;

修改name也会修改players[3].player_name指向的字符串。

答案 2 :(得分:-1)

您正在尝试将player_t字段打印为字符数组,但实际上它们是单个字符。像这样修改你的player_t结构:

struct player_t = 
{
  char* player_name;
  char* player_number;
};