我有一个像这样定义的结构:
typedef struct stringd{
char *y;
char *x[32];
}stringd;
在主程序中我正在声明一个指向stringd的指针,如下所示:
stringd *d = malloc(sizeof(*d));
在main函数中我正在解析输入字符串,然后将其存储在二维char数组
中char *c[32];
每当我遇到'|'我的输入字符串中的字符我将c的项目复制到stringd结构中的* x [32]。如下图所示:
if (c[i][0]=='\174')
for(j=0;j<=i;j++){
d[k].x[j]=c[j];
c[j]=NULL;
}
k++;
一旦输入的最后一个字符串(Delimiter就是空格)被取出,我将数组c的最终副本写入stringd中的x,如图所示(token是指向输入字符串的指针);
if(*token == '\0'||*token=='\n'
for(j=0;j<=i;j++){
d[k].x[j]=c[j];
}
这里的问题是早期存储在struct char数组x中的字符串在最后一次操作时被垃圾字符覆盖。我哪里错了?
任何帮助表示赞赏,
答案 0 :(得分:2)
假设您发布的代码按照确切的顺序运行,这就是我所看到的:
您只分配了一个stringd
个对象。但是在第一次循环之后你会增加k
。因此,在最终的if语句中,您访问的是d[k]
,这超出了您的分配范围。
因此,如果我正确阅读,那么这是未定义的行为,因为您正在写入未分配的内存。