3
for(i = 0; i < sizeof(buff); i++) if(buff[i] = ' ') ++num;
char **parts[num];
char *p;
p = strtok(buff, " ");
int j = 0;
while(p != NULL)
{
         parts[j] = p;
         j++;
         p = strtok(NULL, " ");
}

コンパイル中に警告が発生しました:

parts[j] = p である、互換性のないポインター型からの代入。

私に何ができる?

4

3 に答える 3

2

個々のトークンを配列に格納したいと考えています。現在宣言されているように、partsはポインターへのポインターの配列です。これは、C 文字列の配列に必要なものではありません。アスタリスクを 1 つ削除する必要があります。

char *parts[num]; // This requires at least C99

はではなく でnum開始する必要があることに注意してください。これは、取得するトークンの数が、文字列に含まれるスペースの数よりも 1 つ多いためです。10

その場合でも、プログラムは の結果を処理する方法を修正する必要があります。これらの結果は無効になるため、 の次の呼び出し後に使用するために結果を保存しないstrtokでください。代わりに、トークンを配列に格納する前にトークンの複製を作成する必要があります。strtokparts

parts[j] = strdup(p);
于 2012-10-17T00:46:17.747 に答える
0
char *parts[num];

         

上記で宣言されたポインターの配列へのポインターを次のように宣言できます。

char *(*ptr)[num] = &parts;

ただし、文字列の配列を格納するために、この余分なレベルの間接化は必要ありません

于 2012-10-17T00:38:08.367 に答える
0

実際のコードでこの行を使用しますか?

for(i = 0; i < sizeof(buff); i++) if(buff[i] = ' ') ++num;

バッファ全体をスペースに設定しています。そしてnumに設定sizeof(buff)

したがって、言い換えれば、これはあなたが望む場所にあなたを配置しないかもしれません:

 char **parts[num];
于 2012-10-17T01:02:06.433 に答える