我正在用指向不同字符串的指针填充 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),每个指针都指向不同的地址,我得到:
文本 0 B 文本 1 C 文本 2
但是在这个星座中我得到:
C 文本 2 C 文本 2 C 文本 2
有没有办法增加指针,使其指向不同的地址?
最佳答案
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;
}
关于c - 如何增加字符串表中的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26422923/