我正在从文件中读取,需要用空字符分割字符串。
*Buff = "ABC \0 NAME \0 1231 \0 12.32";
Tok = strtok(Buff,'\0');
printf("Tok %s \n", Tok);
这不起作用,strtok 不能带空参数。
我正在从文件中读取,需要用空字符分割字符串。
*Buff = "ABC \0 NAME \0 1231 \0 12.32";
Tok = strtok(Buff,'\0');
printf("Tok %s \n", Tok);
这不起作用,strtok 不能带空参数。
只需用于 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"
。
你不需要strtok
。只需继续strlen
查找令牌的长度并将其添加到您的指针 + 1。
正如 Carl Norum 指出的那样,您需要字符串的完整长度,因为 a\0
不会告诉您字符串实际停止的位置。
strtok
不使用分隔符有一个很好的理由'\0'
:如果不知道字符串的完整长度,就无法解决这个问题。否则,当您发现 时'\0'
,您不知道这是分隔符还是字符串已经结束。请注意,这strlen
无济于事 - 它会在发现第一个嵌入时立即停止'\0'
。
除了那个“小”问题,您需要做的就是发现标记的开头:它们恰好是'\0'
您之前发现的字符之后的一个字符。
你需要这个:
char Buff[] = "ABC \\0 NAME \\0 1231 \\0 12.32";
char delims[] = "\0" ;
char *result = NULL;
result = strtok( Buff, delims );
现在您可以简单地遍历“结果”,直到获得 NULL,即所有字符串都已找到!
干杯