我尝试将空字符输入到分隔符列表中,但它不会接受它。我尝试输入“\ 0”但它不会接受它。我甚至尝试使用转义字符加双引号,但它仍然不接受它。
我有办法做到这一点吗?
答案 0 :(得分:3)
根据strtok(3),此函数用于隔离以null结尾的字符串中的顺序令牌。所以答案是否定的,不使用strtok,因为该函数无法比较终结符中的\0
分隔符。你必须编写自己的函数(这很简单)。
另请阅读strtok man page中的BUGS部分...最好避免使用它。
答案 1 :(得分:2)
如果允许您使用双\0
作为哨兵结束字符串,则可以构建自己的函数,例如:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *s = "abc\0def\0ghi\0";
char *p = s;
while (*p) {
puts(p);
p = strchr(p, '\0');
p++;
}
return 0;
}
输出:
abc
def
ghi
答案 2 :(得分:0)
无论好坏,C决定所有字符串都以空值终止,因此您无法根据该字符进行解析。
一种解决方法是用你知道在缓冲区中没有出现的东西替换你的(非字符串)二进制缓冲区中的所有空值,然后将其用作将缓冲区视为char *的分隔符。
答案 3 :(得分:0)
在C中,字符串只是字符数组,必须以空字符结尾。如果内存中的字符串没有以这种方式终止,程序将无休止地读取内存,直到找到null char并且由于内存不断变化而无法确定它将在何处。最好的办法是创建一个char指针(字符串)数组,并使用更好的组织填充它们。