1

char *私は、標準入力からの文字列を保持するために動的に割り当てられた配列を使用しようとしている私のコードから以下のスニペットを持っています。

char **reference
reference = calloc(CHUNK, sizeof(char *));

一時的な静的配列を使用して最初に から文字列を格納しstdin、次に特定の条件に基づいて の配列にコピーしますchar *。実行時に個々にメモリを割り当てchar *ています。

                        reference[no_of_ref]=malloc(strlen(temp_in) + 1);
                        reference[no_of_ref++]=temp_in;
//                   printf(" in temp : %s , Value : %s   , Address of charp : %p\n",temp_in,reference[no_of_ref-1],reference[no_of_ref-1]);
                        memset(&temp_in,'\0',sizeof(temp_in));
                        pre_pip = -1;
                }

        /*If allocated buffer is at brim, extend it by CHUNK bytes*/
                if(no_of_ref == CHUNK - 2)
                        realloc(reference,no_of_ref + CHUNK);

sono_of_refは、最終的に受信した文字列の総数を保持します。例 20.しかし、配列全体referenceを出力して各文字列を表示すると、最後に来たのと同じ文字列が得られ、20回出力されます。

4

1 に答える 1

3

あなたのコードのここに問題があります:

reference[no_of_ref]=malloc(strlen(temp_in) + 1);
reference[no_of_ref++]=temp_in;

これは、C でのポインターの割り当てがポインターにのみ影響し、その内容に対して何もしないためです。memcpyまたはのようなものを使用する必要がありstrcpyます。

reference[no_of_ref]=malloc(strlen(temp_in) + 1);
strcpy(reference[no_of_ref], temp_in);
no_of_ref+=1;
于 2013-11-04T04:09:02.143 に答える