结构指针未按预期保存字符数组

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,因为我也在为明天的作业而苦苦挣扎。我问奥斯卡,他告诉我你需要在类的构造函数中为结构分配内存空间。他甚至给我提供了一些示例代码,但我还没有成功。

【讨论】:

以上是关于结构指针未按预期保存字符数组的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2 树枝拆分功能未按预期工作

字符数组与与指针保存字符串区别

对象数组未按预期运行

关于指针数组字符串的恩怨,这里有你想知道的一切

如何使用带有指向数组的指针的SCANF?

结构中的字符数组 - 不兼容的分配? [复制]