0

我正在用指向不同字符串的指针填充一个字符串表 char* 数据 [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

有没有办法增加指针以使其指向不同的地址?

4

1 回答 1

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;
}
于 2014-10-17T10:37:54.287 回答