Как мне увеличить указатель в 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;
}
Другие вопросы по тегам