0

我将使用一个程序,其中的数据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);
4

3 回答 3

2

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

所以:

info[x].player_name = name;

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

于 2013-10-06T01:28:58.077 回答
2

你有:

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

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

struct player_t
{
    char player_name;
    char player_number;
};

您的结构仅包含两个char成员,不足以容纳名称或数字(除非名称仅限于单个字母,并且数字限制为单个数字或非常小的值,具体取决于您的存储方式) . 所以这就是你问题的根源。

假设您希望将名称和数字都存储为字符串,您可以将两个成员数组设为,char例如:

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

然后您需要使用该strcpy()函数将字符串值复制到player_nameand player_number-- 或者您可以使用字符串文字初始化它们,但这不会让您在程序执行期间确定名称和编号。您还必须注意不要尝试将字符串存储的时间超过player_name并且player_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

于 2013-10-06T02:19:26.293 回答
-1

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

struct player_t = 
{
  char* player_name;
  char* player_number;
};
于 2013-10-06T01:33:23.903 回答