2014-10-17 25 views
0

我用指向不同字符串的指针填充了一个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)每个指针指向一个不同ADRESS纯字符串和获取:

文本0 乙文本1 C文本2

但在这个星座,我得到:

C文本2 C文本2 C文本2

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

回答

1

data阵列中的所有指针指向相同的位置,即PrintBuffer

您必须为每个字符串分配一个新的缓冲区。

输出功能shoukd被修改如下:

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; 
} 
+1

推荐约'的注释,免费()'。 – chux 2014-10-17 10:56:33

+0

这正是我所寻找的。非常感谢 – typeJoelz 2014-10-17 11:49:45