strtok遇到空字符时移动一位

问题描述 投票:0回答:1

当我从使用

strtok
以逗号分隔的字符串中读取数据时,如果之前读取的值为(空),则正在读取的值会发生移位。

int main (void)
{ 
    char Temp[10] = "1,2,3,,4";
    
    printf("%s\n", strtok(Temp, ","));
    printf("%s\n", strtok(NULL, ","));
    printf("%s\n", strtok(NULL, ","));
    printf("%s\n", strtok(NULL, ","));
    printf("%s\n", strtok(NULL, ","));
}

预期输出:

1
2
3
(null)
4

实际输出:

1
2
3
4
(null)

即使有 2 个空格也会发生同样的情况。它只是移动了两次,而不是一次。

c strtok
1个回答
2
投票

strtok
解析字符串时,任何连续的分隔符都会被分组在一起。这基本上意味着在到达字符串末尾之前您永远不会看到空白标记。

手册页说明以下内容:

从上面的描述可以看出,两个 or 的序列
考虑解析字符串中更多连续的分隔符字节 是单个分隔符,并且该分隔符字节位于开头或 字符串末尾被忽略。换句话说:代币

strtok()
返回的始终是非空字符串。因此,对于 例如,给定字符串 "aaa;;bbb,",连续调用
strtok()
指定分隔符字符串 `;," 将返回字符串 “aaa”“bbb”,然后是一个空指针。

所以您看到的是预期的行为。

如果您希望能够将连续分隔符视为空白标记,则需要使用

strchr
查找每个分隔符并自行复制相关子字符串。

© www.soinside.com 2019 - 2024. All rights reserved.