下面的程序没有打印预期的输出:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char *keyword;
char *keyword2;
} my_struct;
int main(void) {
char str[] = "keyword1,key word 2,keyword3,keyword 4";
my_struct *pstr = NULL;
int i, count;
char *pch;
// String break
pch = strtok(str, ",");
for (i = 0; pch != NULL; i++) {
pstr = realloc (pstr, (i+1)*sizeof(my_struct *));
pstr[i].keyword = malloc (strlen(pch) + 1);
strcpy(pstr[i].keyword, pch);
pch = strtok (NULL, ",");
}
count=i;
// Print values
for (i=0; i<count; i++) {
printf("%d: %s\n", i, pstr[i].keyword);
}
return 0;
}
输出:
0: p`�
1: key word 2
2: (null)
3: keyword 4
但是,如果我从“my_struct”中删除“char *keyword2”,一切正常:
0: keyword1
1: key word 2
2: keyword3
3: keyword 4
有人可以向我解释为什么会这样吗?
最佳答案
嗯,我想 sizeof(my_struct *)
会返回大小或指针。您需要使用 sizeof(my_struct)
。
如果您删除 char *keyword2;
,它会起作用,因为结构的大小变得等于指针的大小(结构包含一个指针)。
关于c - 为结构成员分配内存时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22826803/