[英]Why does my pointer to struct forget strings?
在我的主要功能中,我有兩個播放器,分別以包含名稱的數據結構表示。 當在另一個源文件中創建指向這些結構的指針時,我無法訪問名稱字符串,而其余數據很好。
//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-> ....訪問。
player1
的類型必須為Pokemon
,因為它從函數獲取其值summon
返回一個Pokemon
p1
是Pokemon *
(又名Pokemon指針)的類型
然后你做player1 = p1;
換句話說-您將“口袋妖怪指針”分配給無效的“口袋妖怪”。
似乎發生的情況是,您用指針變量覆蓋了一部分字符串name
,從而破壞了字符串值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.