1

CとC++またはC#を混同し続けているので、ダブルチェックしますが、strcspn()を使用して解析していた文字列があると言います。最初に見つかった区切り文字までの文字列の長さを返します。strncpyを使用します(これはC ++のみですか、それともCでも使用できますか?)文字列の最初の部分を別の場所にコピーし、変数に自分の位置を格納させます。strcspnが10を返したとしましょう(したがって、区切り文字は10番目の文字です)

今、私のコードは他のことをしているので、最終的には文字列をトラバースし続けたいと思います。文字列の後半をコピーして、最初からstrncspn()を呼び出す必要がありますか?ポインタを作成して文字列の11番目の文字にポイントし、それをstrncspn()に渡すことはできますか(char * pos = str [11]のようなものだと思います)。私が見逃している他のもっと簡単なものはありますか?

4

3 に答える 3

0

あなたstr[9]は10番目の文字、またはstr[10]11番目の文字を意味しますが、そうすることができます。

文字列の長さを超えて、割り当てられたメモリのサイズを超えてアクセスしないように注意してください。

トークン化を実行しているようです。代わりに直接使用できることをお勧めします。strtokよりクリーンで、実行したいことの両方をすでに処理しています(strcspn + strncpyで、区切り文字の後で解析を続行します)。

于 2013-01-16T05:29:06.580 に答える
0

最初の引数としてstrcspn再度呼び出すことができます。(str + 11)ただし、 の長さstrが より大きいことを確認して11ください。

n = strcspn(str, pattern);
while ((n+1) < strlen(str))
{
    n2 = strcspn((str+n), pattern);
    n += n2;
}

注:使い方char *pos = str[11]は間違っています。次のように使用する必要がありますchar *pos = str + 11;

于 2013-01-16T05:32:57.990 に答える
0

文字列の途中の場所へのポインタを取得でき、それを行うために文字列の後半をコピーする必要はありません。

char * offset = str + 10;

char * offset = &str[10];

同じことを意味し、両方ともあなたが望むことをします。

于 2013-01-16T05:34:24.443 に答える