1

私は一般的にCに比較的慣れていないので、いくつかのコードに問題があります。これは非常に単純なコードです。コードの目的は、指定された char ポインターの配列、つまり char **source を指定された char **destination にコピーすることです。

私が抱えている問題は、時々 (通常、ソースに 2 つ以上の文字列がある場合) 最初の要素が完全に破損し、目的地を出力すると、「;@?」のようなものが出力されることです。最初の要素の場合、他の要素は正常に印刷されます。

コピーを実行するコードは次のとおりです。

void CopyArrayOfStrings(char **source, int numStrings)
{
   char **destination = malloc(numStrings);

    for (int i = 0; i < numStrings; i++)
    {
        destination[i] = malloc(strlen(source[i] + 1);
        strcpy(destination[i], source[i]);
    }
}

malloc の結果が NULL かどうかをチェックするコードを省略していることに注意してください。

4

2 に答える 2

1

asの割り当てを変更する必要がありますdestination:

char **destination = malloc(numStrings*(sizeof(char*)));

char *文字列を保持するためのポインタの数を割り当てます。

char **また、文字列のソース配列として適切に渡していることも確認してください。

于 2012-11-04T06:24:08.543 に答える
0

あなたはそれを間違っています。

void CopyArrayOfStrings(char **source, int numStrings)
{
   char **destination = malloc(numStrings * sizeof(char *));

    for (int i = 0; i < numStrings; i++)
    {
        destination[i] = malloc(strlen(source[i]) + 1);
        strcpy(destination[i], source[i]);
        //alternatively you can use strdup() as suggested by @Christoffer
    }
}

numStringsこれにより、アレイ用のストレージ スペースが確保されます。その各要素は、null で終わる文字列を指します。

于 2012-11-04T06:42:27.777 に答える