Как мне увеличить указатель в stringtable?
Я заполняю строковые данные char* data [500] указателями на разные строки.
char* data [500];
int stringC = 0;
char PrintBuffer[200];
void data_display(void);
void printStringTable(void);
int main() {
data_display(); //fill buffer
printStringTable();
return 0;
}
Здесь я использую другой буфер, чтобы сохранить индекс в строке:
void data_display(void)
{
int index =0;
sprintf(PrintBuffer,"A Text %d\n", index);
output(PrintBuffer);
index ++;
sprintf(PrintBuffer,"B Text %d\n",index);
output(PrintBuffer);
index ++;
sprintf(PrintBuffer,"C Text %d\n",index);
output(PrintBuffer);
}
При отладке я вижу, что указатель всегда указывает на один и тот же адрес.
void output(char* Buffer)
{
data[stringC]= Buffer;
char*(*ptr)[500] = &data;
stringC++;
ptr+=stringC;
}
void printStringTable()
{
int i;
for (i = 0; i < 3; i++) {
printf(data[i]);
}
}
Если у меня есть чистые строки без использования другого буфера (PrintBuffer), каждый указатель указывает на другой адрес, и я получаю:
A Текст 0 B Текст 1 C Текст 2
Но в этом созвездии я получаю:
C Текст 2 C Текст 2 C Текст 2
Есть ли способ увеличить указатель, чтобы он указывал на другой адрес?
1 ответ
Решение
Все указатели в data
массив указывает на то же место, то есть PrintBuffer
,
Вы должны выделить новый буфер для каждой из ваших строк.
Функция вывода должна быть изменена следующим образом:
void output(char* Buffer)
{
char *newbuffer = strdup(Buffer) ;
data[stringC]= newBuffer;
// removed: this it's pointless char*(*ptr)[500] = &data;
stringC++;
// removed: this it's pointless ptr+=stringC;
}