簡體   English   中英

為什么指向struct的指針會忘記字符串?

[英]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

p1Pokemon * (又名Pokemon指針)的類型

然后你做player1 = p1;

換句話說-您將“口袋妖怪指針”分配給無效的“口袋妖怪”。

似乎發生的情況是,您用指針變量覆蓋了一部分字符串name ,從而破壞了字符串值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM