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) を使用せずに純粋な文字列がある場合、すべてのポインターが別のアドレスを指し、次のようになります。

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 に答える