【发布时间】:2013-08-17 08:50:48
【问题描述】:
我今天正在努力修复代码,然后我遇到了类似的情况:
typedef struct {
int a;
int b;
int c;
int d;
char* word;
} mystruct;
int main(int argc, char **argv){
mystruct* structptr = malloc(sizeof(mystruct));
if (structptr==NULL) {
printf("ERROR!")
...
}
...
free(structptr);
return 0;
}
由于char* word 是一个可变长度的字符串,并且 malloc 没有为它分配足够的内存,因此代码给出了很多内存错误。事实上,它只是为整个struct 分配20 Bytes。有没有办法解决这个问题,而不是将char* 变成char word[50] 之类的东西?
【问题讨论】:
-
看到您有评论,但随后将其删除。请使用更多信息编辑您的问题或提交第二个问题。有一些方法可以处理长度变化的
char向量。 -
我添加了评论,然后在下面的 cmets 中找到了答案。我相信,固定的缓冲区大小实际上是最好的解决方案,因为单词将代表一个名字,而名字不应该和小说一样长;)。谢谢您的帮助。我真的很好奇为变量字符串分配内存,这就是我问的原因。但无论如何我都会切换到固定长度的数组。
-
现在空间(即 RAM)很充足,因此在大多数情况下,定义一个 1024 大的字符数组不会造成问题。 I/O 缓冲区通常比这大得多。
-
@hhachem 您显然不太了解指针。请阅读指针和数组(例如,here)
标签: c pointers memory struct malloc