我在将文本传递给结构成员时遇到问题。这是我的代码
#include <stdio.h>
#include <string.h>
typedef struct {
char *name;
int rank;
int weapons;
}player;
player create_player(char name[], int rank, int weapons);
void display_player(player data);
int main (int argc, const char * argv[])
{
player tmp = create_player("First", 3, 3);
display_player(tmp);
}
player create_player(char name[], int rank, int weapons)
{
player newobj;
char *tmp = malloc(strlen(name) + 1);
strcpy(newobj.name, tmp);
newobj.rank = rank;
newobj.weapons = weapons;
free(tmp);
return newobj;
}
void display_player(player data)
{
printf("Player name %s\n", data.name);
printf("Player rang %d\n", data.rank);
printf("Player weapons %d", data.weapons);
}
Run Code Online (Sandbox Code Playgroud)
这是输出
Player name
Player rang 3
Player weapons 3
Run Code Online (Sandbox Code Playgroud)
如您所见,“玩家名称”的结果为空。你还能给我更优雅的方式来为 newobj.name 分配文本吗?我想念什么?
在strcpy你的代码是错误的(它复制未初始化的数据为未分配的内存)。你可能想要:
newobj.name = malloc(strlen(name) + 1);
strcpy(newobj.name, name);
Run Code Online (Sandbox Code Playgroud)
或者更简单地说,如果你有strdup:
newobj.name = strdup(name);
Run Code Online (Sandbox Code Playgroud)