gpt4 book ai didi

c - 结构中的二维字符数组在循环时被覆盖

转载 作者:太空宇宙 更新时间:2023-11-04 03:04:15 24 4
gpt4 key购买 nike

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

typedef struct stringd{
char *y;
char *x[32];
}stringd;

在主程序中,我声明了一个指向 stringd 的指针,如下所示:

stringd *d = malloc(sizeof(*d));

在主函数中,我正在解析一个输入字符串,然后将其存储在一个二维字符数组中

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++;

一旦从输入中获取最后一个字符串(分隔符是空格),我将数组 c 的最终副本复制到 stringd 中的 x,如图所示( token 是指向输入字符串的指针);

if(*token == '\0'||*token=='\n' 
for(j=0;j<=i;j++){
d[k].x[j]=c[j];
}

这里的问题是之前存储在 struct char 数组 x 中的字符串在最后一次操作时被垃圾字符覆盖。我哪里错了?

感谢任何帮助,

最佳答案

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

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

因此,如果我没看错的话,这是未定义的行为,因为您正在写入未分配的内存。

关于c - 结构中的二维字符数组在循环时被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7658622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com