-5

我正在从文件中读取,需要用空字符分割字符串。

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

这不起作用,strtok 不能带空参数。

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.

终止条件是当Tok >= Buff + sizeof "ABC \0 NAME \0 1231 \0 12.32"

于 2013-01-27T16:52:33.040 回答
1

你不需要strtok。只需继续strlen查找令牌的长度并将其添加到您的指针 + 1。

正如 Carl Norum 指出的那样,您需要字符串的完整长度,因为 a\0不会告诉您字符串实际停止的位置。

于 2013-01-27T16:52:26.847 回答
1

strtok不使用分隔符有一个很好的理由'\0':如果不知道字符串的完整长度,就无法解决这个问题。否则,当您发现 时'\0',您不知道这是分隔符还是字符串已经结束。请注意,这strlen无济于事 - 它会在发现第一个嵌入时立即停止'\0'

除了那个“小”问题,您需要做的就是发现标记的开头:它们恰好是'\0'您之前发现的字符之后的一个字符。

于 2013-01-27T16:54:00.050 回答
-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 回答