如何使用null字符作为分隔符的strtok()字符串?

时间:2016-01-22 00:14:48

标签: c parsing strtok

我尝试将空字符输入到分隔符列表中,但它不会接受它。我尝试输入“\ 0”但它不会接受它。我甚至尝试使用转义字符加双引号,但它仍然不接受它。

我有办法做到这一点吗?

4 个答案:

答案 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指针(字符串)数组,并使用更好的组织填充它们。