在C中用空字符分割字符串

时间:2013-01-27 16:49:42

标签: c

我正在读取文件,需要将字符串拆分为空字符。

    *Buff = "ABC \0 NAME \0 1231 \0 12.32";
    Tok = strtok(Buff,'\0');
    printf("Tok %s \n", Tok);

这不起作用,strtok不能采用null参数。

4 个答案:

答案 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,即所有的字符串都被找到了!

干杯