2014-10-17 54 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