【发布时间】:2018-12-12 07:13:49
【问题描述】:
我想要做的是获取字符串,将其保存到字符串数组中,然后根据索引修改每个副本。
我编辑了问题和代码,内容混乱且不清楚。由于问题几乎相同(我认为现在更准确),我想我可以在这里完全编辑它而无需创建新问题,但如果我必须做不同的事情,请告诉我。
问题(编辑):在阅读给出的答案、创建一个 MVCE 并阅读 this 和一些调试技巧之后,我想我在指针和 strcpy 上做的一团糟......为什么下面的代码(编辑为 MVCE)会给出这个输出?
abc
x
x
y
它可以编译并且没有调试错误,但我希望代码将 line_ret 中字符串的第一个字符更改为“x”,如果 index==0,如果 index==1,则更改为“y”。 我读过here 无法更改指针指向的单个字符,但是如果我不知道必须将 line_read 复制到 line_ret 多少次,因此不知道要声明的最大索引大小怎么办数组 line_ret?
代码(编辑):
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
size_t len = 10;
int main(void){
char *line_read = malloc(5);
strcpy(line_read, "abc");
char **line_ret = malloc(5 * sizeof(char*));
int index = 0;
while(index < 2){
line_ret[index] = realloc(line_ret, 1*len);
memcpy(&line_ret[index], &line_read, len);
printf("%s\n", line_ret[index]);
if(index == 0){
strcpy(&line_ret[index][0], "x");
} else if(index == 1){
strcpy(&line_ret[index][0], "y");
}
printf("%s\n", line_ret[index]);
index++;
}
free(line_read);
free(line_ret);
return 0;
}
【问题讨论】:
-
那堵文字不可读,第一行代码已经不正确,如果你分配的是
char **,则元素大小是sizeof(char *),而不是sizeof(char)。 -
如果您正在寻求调试程序的帮助,您必须发布minimal reproducible example。另外,问题到底是什么?您的帖子有一个非常长的段落难以阅读,请尝试使用一些标点符号并将其分成多个段落。
-
@FBergo 我尽量描述情况,我会调整文本大小并给出段落。这是一个拼写错误,对不起,我现在就改正它。
-
@jwdonahue 问题写在粗体字“问题”之后。如果问题还不清楚,请告诉我。我现在将提供段落。
-
发布编译和演示问题的代码。当您将其剥离为 MCVE 时,您可能已经自己发现了缺陷。