c - 使用结构和 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
解决方案
hero->name
您从分配,piece
然后从str
. 这意味着只要您更改str
(从调用的函数tokenizeHero()
)您的str
更改。然而,您将指向其中一部分的指针存储在hero->name
. 不好。
将其更改为hero->name = strdup(piece);
并确保在完成hero
. 或更改name
为数组并使用strlcpy(hero->name, piece, sizeof(hero->name))
.
推荐阅读
- swift - 在未更新时也组合 @Published 属性发送值
- mongodb - 如何跳过 MongoDB 中的两个不同类别?
- python - Python:如何在矩阵中反向访问对角线?
- c - scanf 读取后输入缓冲区是否被清除?
- ember.js - 如何在 Ember.js 3.18 中获取我的应用程序的所有路由列表?
- r - Geom_text 标签位置不正确
- r - R循环直到通过更改输入数据满足条件
- go - Firestore 中未找到的 docRef.Get(ctx) 的读取成本是多少?
- javascript - 同源策略:为什么 JS 代码不能向其域发出 HTTP 请求?
- node.js - 如何配置节点电子邮件模板以使用 SendGrid 作为传输