2

文字列配列の最初の 2 つの要素を削除するにはどうすればよいですか? このようなコードがあります。

char *x[10];
..............
..............
..............
char *event[20];
event[0]=strtok(x[i]," ");
event[1]=strtok(NULL," ");
event[2]=strtok(NULL," ");
event[3]=strtok(NULL," ");
event[4]=strtok(NULL," ");
event[5]=strtok(NULL," ");
for(i=2;i<length;i++)
{
    strcpy(event[i-2],event[i]);
}

event[0] だけが適切な値を持つことがわかりました。for ループの前に event[][] の内容を出力したところ、正しく表示されました。なぜこれが間違っているのか教えてください。そして可能な解決策は?

4

1 に答える 1

2

strcpy()このコードでは使用しないでください。APIは、検出された delimiter で終了した後、元のソース バッファー内でstrtok()検出された区切りトークンへのポインターを返します。したがって、 あるべきではない場所を使用しています。strcpy()

配列events[]にはから返されたポインターstrtok()があります。最初の 2 つのポインターを捨てて、他のポインターを下に移動します。

for(i=2;i<length;i++)
    event[i-2] = event[i];
length -= min(length, 2);

注: はmin()、符号付きまたは符号なしの長さがゼロ (符号付きの場合) または UINT_MAX (符号なしの場合) を下回ることがないようにするために必要ですlength

于 2012-12-06T04:49:07.733 に答える