c - 如何增加字符串表中的指针?

标签 c string ansi-c string-table

我正在用指向不同字符串的指针填充 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/

相关文章:

c - 如果程序设置了 setuid 位,为什么/proc/self 中的文件最终会归 root 所有?

c - 使用 while 循环在 C 中切换

java - 将 C 字符转换为 UTF-16 以便通过网络传输

javascript - 从 node.js 中的文件流中删除最后一个字符(fs 模块)

c++ - 填充字符串数组或 char* 数组的问题

c++ - -迂腐警告和 pthread_create

c - 为什么在 c99 或 c90 模式中支持 _Generic 关键字?

c - stm32 SPI+DMA

c# 我想知道字符串中的前 3 个字符是否为字母?

c - 求值顺序 : undefined behavior? 还是编译器缺陷?