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