首页 > 解决方案 > 使用结构和 char* 已损坏但其他数据字段不是?

问题描述

所以我基本上做了一个结构来接受五个数据字段,其中四个是整数,另一个是字符*。在赋予每个人自己的价值之后,每当我尝试使用 char* 时,我只会收到损坏的结果,但每当我使用整数时,我都没有问题。任何人都可以纠正我的错误,因为我不确定它是什么。

头文件:rph.h

typedef struct
{
    float HP;
    float ATK;
    float DEF;
    float MED;
    char* name;
} Heros;

结构获得价值的代码:

void tokenizeHero(char* str, Heros* hero)
{
    char* piece = strtok(str, ",");
    hero->HP = atof(piece);

    piece = strtok(NULL, ",");
    hero->ATK = atof(piece);

    piece = strtok(NULL, ",");
    hero->DEF = atof(piece);

    piece = strtok(NULL, ",");
    hero->MED = atof(piece);

    piece = strtok(NULL, ",");
    hero->name = piece;
}

这里的变量 str 看起来像 20,6,3,1,Arlen

标签: c

解决方案


hero->name您从分配,piece然后从str. 这意味着只要您更改str(从调用的函数tokenizeHero())您的str更改。然而,您将指向其中一部分的指针存储在hero->name. 不好。

将其更改为hero->name = strdup(piece);并确保在完成hero. 或更改name为数组并使用strlcpy(hero->name, piece, sizeof(hero->name)).


推荐阅读