Что я хочу сделать, это взять строку, сохранить ее в массив строк, а затем изменить каждую копию на основе индекса.
Я редактировал вопрос и код, он был грязным и неясным. Поскольку вопрос почти такой же (я думаю, что теперь он более точный), я подумал, что могу полностью отредактировать его здесь, не создавая новый вопрос, но дайте мне знать, если мне придется поступить иначе.
ПРОБЛЕМА (РЕДАКТИРОВАТЬ) : после прочтения данного ответа, создания MVCE и чтения this и некоторых советов по отладке, я думаю, что я путаюсь с указателями и strcpy ... Почему следующий код (отредактированный как MVCE) дает этот вывод?
abc
x
x
y
Он компилируется и не дает ошибок отладки, но я хочу, чтобы код изменил первый символ строки в line_ret на "x", если index == 0, и на "y", если index == 1.
Я читаю здесь невозможно изменить один символ в том, на что указывает указатель, но что если я не знаю, сколько раз мне нужно копировать 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;
}