Вы выделяете только один строковый массив str
.На каждой итерации цикла вы просто перезаписываете str
.Присвоение x[i] = str
присваивает указателю значение str
для x[i]
.Вы заметите, что каждый член массива x
указывает на тот же самый буфер str
в конце цикла.Вам необходимо создать несколько буферов.
Один из способов сделать это - определить максимальное количество строк, используя #define LINES 100
, а затем объявить x
следующим образом
char x[LINES][MAX];
, а затемвыполните strcpy
на каждой итерации:
while(fgets(str, sizeof str, fp)) {
strcpy(x[i], str);
printf("%s", str);
printf("%s", *(x+i));
i++;
}
Обратите внимание, что вы должны рассмотреть использование метода strncpy
вместо strcpy
и проверьте возвращаемое значение, чтобы буферы не переполнялись.*