循环时,结构中的二维char数组会被覆盖

时间:2011-10-05 08:33:47

标签: c pointers struct

我有一个像这样定义的结构:

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中的字符串在最后一次操作时被垃圾字符覆盖。我哪里错了?

任何帮助表示赞赏,

1 个答案:

答案 0 :(得分:2)

假设您发布的代码按照确切的顺序运行,这就是我所看到的:

您只分配了一个stringd个对象。但是在第一次循环之后你会增加k。因此,在最终的if语句中,您访问的是d[k],这超出了您的分配范围。

因此,如果我正确阅读,那么这是未定义的行为,因为您正在写入未分配的内存。