如何使用空字符作为分隔符来 strtok() 字符串?

How to strtok() string using the null character as the delimiter?

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

我有办法做到这一点吗?

根据 strtok(3),此函数用于隔离 null-terminated 字符串中的顺序标记。所以答案是否定的,不使用 strtok,因为该函数无法将 [=10=] 分隔符与终止符进行比较。您将不得不编写自己的函数(这是微不足道的)。

另请阅读 strtok man page 中的 BUGS 部分...最好避免使用它。

无论好坏,C 决定所有字符串都以 null 结尾,因此您无法根据该字符进行解析。

一种解决方法是将 (non-string) 二进制缓冲区中的所有空值替换为您知道缓冲区中不会出现的内容,然后将其用作分隔符,将缓冲区视为 char*。

在 C 中,字符串只是必须以空字符结尾的字符数组。如果内存中的字符串没有以这种方式终止,程序将无休止地读取内存,直到找到空字符,并且由于内存不断变化,因此无法确定它的位置。最好的办法是创建一个 char 指针(字符串)数组并使用更好的组织来填充它们。

如果您被允许以双 [=12=] 作为标记结束您的字符串,您可以构建自己的函数,例如:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char *s = "abc[=10=]def[=10=]ghi[=10=]";
    char *p = s;

    while (*p) {
        puts(p);
        p = strchr(p, '[=10=]');
        p++;
    }
    return 0;
}

输出:

abc
def
ghi