如何使用空字符作为分隔符来 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
我尝试将空字符输入到分隔符列表中,但它不接受。我尝试输入“\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