-5

ファイルから読み取っていて、文字列をヌル文字で分割する必要があります。

    *Buff = "ABC \0 NAME \0 1231 \0 12.32";
    Tok = strtok(Buff,'\0');
    printf("Tok %s \n", Tok);

これは機能しません。strtok は null 引数を取ることができません。

4

4 に答える 4

3

strlen(the_string) + 1トークンを取得するために使用するだけ です:

例:

Tok = Buff;
Tok += strlen(Tok) + 1;    // first token
Tok += strlen(Tok) + 1;    // second token
Tok += strlen(Tok) + 1;    // third token, etc.

終了条件は whenTok >= Buff + sizeof "ABC \0 NAME \0 1231 \0 12.32"です。

于 2013-01-27T16:52:33.040 に答える
1

strtokが区切り文字で機能しないのには十分な理由があり'\0'ます。文字列の全長を知らずにこの問題を解決することはできません。そうしないと、 を発見したときに、それ'\0'が区切り文字なのか、それとも文字列が既に終わっているのかわかりません。strlen役に立たないことに注意してください。最初の埋め込みが検出されるとすぐに停止し'\0'ます。

その「ちょっとした」問題を除けば、必要なのはトークンの始まりを発見することだけです: それらはたまたま、'\0'以前に発見した文字の 1 文字後にあります。

于 2013-01-27T16:54:00.050 に答える
1

必要ありませんstrtokstrlenトークンの長さを見つけて、ポインター + 1 に追加するだけです。

\0Carl Norum が指摘しているように、文字列が実際にどこで停止するかがわからないため、文字列の全長が必要です。

于 2013-01-27T16:52:26.847 に答える
-1

あなたはこれを必要とします:

char Buff[] = "ABC \\0 NAME \\0 1231 \\0 12.32";
char delims[] = "\0"  ;
char *result = NULL;  
result = strtok( Buff, delims );

これで、NULL、つまりすべての文字列が見つかるまで、「結果」を単純に繰り返すことができます。

乾杯

于 2013-01-27T17:17:57.657 に答える