在我的主要功能中,我有两个播放器,它们由带有数据的结构表示,包括名称。在另一个源文件中创建指向这些结构的指针时,我无法访问名称字符串,而其余数据很好。
//In pokemonList.c
typedef struct{
char name[20];
int level;
int health;
int type;
int type2;
int fainted;
int moves[4];
//stats
int hp;
int attack;
int defense;
int spAttack;
int spDefense;
int speed;
int attackStage;
int defenseStage;
int spAttackStage;
int spDefenseStage;
int speedStage;
int spriteNo;
}Pokemon;
Pokemon summon(Pokemon pokemon, int level){
pokemon.level = level;
pokemon.health = (int)((((2.0 * (double)pokemon.hp) + 31.0) * (double)level)/100.0) + (double)level + 10.0;
pokemon.attack = levelUp(pokemon.attack, pokemon.level);
pokemon.defense = levelUp(pokemon.defense, pokemon.level);
return pokemon;
}
//In main.c
player1 = summon(venusaur, 50);
player2 = summon(blastoise, 100);
initialiseGUI(&player1, &player2);
//In video.c
void initialiseGUI(Pokemon *p1, Pokemon *p2){
strcpy(player1name, p1->name);
strcpy(player2name, p2->name);
printf("p1->name: %s\n", p1->name);
player1 = p1;
player2 = p2;
printf("p1->name: %s\nplayer1->name: %s\n", p1->name, player1->name);
}
我希望它的输出是:
p1->name: Venusaur
p1->name: Venusaur
player1->name: Venusaur
实际输出:
p1->name: Venusaur
p1->name:
player1->name:
该结构中的所有其他数据均可从player1->访问。...
答案 0 :(得分:2)
player1
的类型必须为Pokemon
,因为它是从返回summon
的函数Pokemon
中获取其值的。
p1
的类型为Pokemon *
(又名Pokemon指针)
然后您进行player1 = p1;
换句话说-您将“口袋妖怪指针”分配给无效的“口袋妖怪”。
似乎发生的事情是,您用指针变量覆盖了字符串name
的一部分,从而破坏了字符串值。