结构指针未按预期保存字符数组
Posted
技术标签:
【中文标题】结构指针未按预期保存字符数组【英文标题】:Struct pointer doesn't save character array as expected 【发布时间】:2021-12-11 18:27:05 【问题描述】:typedef struct _Text
char *str;
int length;
int counter;
*Text;
int main(void)
Text txt= malloc(sizeof(Text));
char *txtStr="hi";
txt->str=txtStr;
return 0;
该结构根本无法按预期工作,检查时给定的 char 数组未正确保存。
【问题讨论】:
至少Text txt= malloc(sizeof(*Text));
,因为sizeof(Text)
只是指针的大小...
因为Text
是指针类型,那么sizeof(Text)
会产生一个指针的大小,与你需要为其分配空间的实际结构的大小不同。将malloc(sizeof(Text))
替换为malloc(sizeof *txt)
。
请不要创建指针的类型别名(如Text
)。这使得代码更难阅读和理解(因此也更难维护)。这也让你更容易犯错误。
另外注意,结构标签名称(例如您的_Text
)存在于它们自己的命名空间中,这意味着您可以拥有结构标签和类型别名同名。所以typedef struct Text ... Text;
完全没问题。
@Lundin 是的,就像著名的string
。
【参考方案1】:
typedef struct Text
char *str;
int length;
int counter;
Text;
阅读更好
然后
int main(void)
Text *txt = malloc( sizeof( Text ));
txt->str = malloc( sizeof( char ) *3);
strcpy( txt->str, "hi" );
printf("%s\n", txt->str );
return 0;
【讨论】:
【参考方案2】:也在UPV中?我认识这个 typedef,因为我也在为明天的作业而苦苦挣扎。我问奥斯卡,他告诉我你需要在类的构造函数中为结构分配内存空间。他甚至给我提供了一些示例代码,但我还没有成功。
【讨论】:
以上是关于结构指针未按预期保存字符数组的主要内容,如果未能解决你的问题,请参考以下文章