1

これは基本的にダブルポインターの単純なコードであり、私が使用しようとしているものです:

int argsCount = 1;
char **cmdArgs1 = malloc((argsCount + 1)*sizeof(char*));

cmdArgs1 に値を入力したいのですが、これが基本的に私がやっていることであり、セグフォルトを引き起こしています

for(counter = 0; counter < argsCount; counter++)
{
    strcpy(cmdArgs1[counter],"ls");
}

ダブルポインターがそのように機能しないため、「cmdArg1 [カウンター]」を使用して「ls」にコピーできないと思いますか? わからない...

少しあいまいだと思いますが、質問をうまく表現する方法がわかりません。コメントに基づいて更新してみます。どうも!

4

1 に答える 1

3

YourcmdArgs1はポインターへのポインターです。つまり、配列自体にスペースを割り当てるには十分ではありません。個々の文字配列 (または個々の C 文字列) にスペースを割り当てる必要があります。

の別の呼び出しでそれを行うことができますmalloc

for(counter = 0; counter < argsCount; counter++)
{
    cmdArgs1[counter] = malloc(strlen("ls")+1); // +1 for null terminator
    strcpy(cmdArgs1[counter], "ls");
}

またはでstrdup

for(counter = 0; counter < argsCount; counter++)
{
    cmdArgs1[counter] = strdup("ls");
}

どちらの場合も、プログラムは配列自体を ing するfree前に配列の要素を ing する責任があります。free

for(counter = 0; counter < argsCount; counter++)
{
    free(cmdArgs1[counter]);
}
free(cmdArgs1);
于 2013-10-13T12:01:33.200 に答える