我将使用一个程序,其中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);
答案 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_name
和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
指向的字符串。
答案 2 :(得分:-1)
您正在尝试将player_t字段打印为字符数组,但实际上它们是单个字符。像这样修改你的player_t结构:
struct player_t =
{
char* player_name;
char* player_number;
};