ファイルから読み取っていて、文字列をヌル文字で分割する必要があります。
*Buff = "ABC \0 NAME \0 1231 \0 12.32";
Tok = strtok(Buff,'\0');
printf("Tok %s \n", Tok);
これは機能しません。strtok は null 引数を取ることができません。
ファイルから読み取っていて、文字列をヌル文字で分割する必要があります。
*Buff = "ABC \0 NAME \0 1231 \0 12.32";
Tok = strtok(Buff,'\0');
printf("Tok %s \n", Tok);
これは機能しません。strtok は null 引数を取ることができません。
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"
です。
strtok
が区切り文字で機能しないのには十分な理由があり'\0'
ます。文字列の全長を知らずにこの問題を解決することはできません。そうしないと、 を発見したときに、それ'\0'
が区切り文字なのか、それとも文字列が既に終わっているのかわかりません。strlen
役に立たないことに注意してください。最初の埋め込みが検出されるとすぐに停止し'\0'
ます。
その「ちょっとした」問題を除けば、必要なのはトークンの始まりを発見することだけです: それらはたまたま、'\0'
以前に発見した文字の 1 文字後にあります。
必要ありませんstrtok
。strlen
トークンの長さを見つけて、ポインター + 1 に追加するだけです。
\0
Carl Norum が指摘しているように、文字列が実際にどこで停止するかがわからないため、文字列の全長が必要です。
あなたはこれを必要とします:
char Buff[] = "ABC \\0 NAME \\0 1231 \\0 12.32";
char delims[] = "\0" ;
char *result = NULL;
result = strtok( Buff, delims );
これで、NULL、つまりすべての文字列が見つかるまで、「結果」を単純に繰り返すことができます。
乾杯