C - strtok 返回更少的数据

标签 c string strtok

char line[81] = "$11,$10,1";
token = strtok(line, " \t\v,$");
token = strtok(NULL, ",");

printf("%s\n",token );  // its $10 from the previous strtok 

if(strstr (token, "$") != NULL){
token = strtok(NULL, "$");
printf("%s\n",token );  // I want to print 10 but it prints 1.
}

我正在尝试使用 strtok 删除一个字符。然而,如您所见,它只返回一位数字。

最佳答案

如果您想要 10 作为结果,那么我认为您正在寻找的是

char line[81] = "$11,$10,1";
token = strtok(line, " \t\v,$");
token = strtok(NULL, ",");

if(*token == '$')
    printf("%s\n", token + 1); 
else
    ... do something else ...

毕竟你已经得到了你的 token ,再找也没有用。

正如@Dietrich 所说,输出看起来是正确的。让我为您分解一下。

char line[81] = "$11,$10,1";
token = strtok(line, " \t\v,$");

这会忽略开头的“$”(因为它是分隔符)并返回“11”。

token = strtok(NULL, ",");   
printf("%s\n",token );  // its $10 from the previous strtok 

strtok 吃掉“,”并返回“$10”。好像也吃下面的 ","-- 我正在阅读的手册页允许但不要求该行为。

if(strstr (token, "$") != NULL){
    token = strtok(NULL, "$");

剩余的字符串是非空的,但没有更多的“$”分隔符。因此,此 strtok 将返回整个余数,即“1”。

关于C - strtok 返回更少的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22823371/

相关文章:

c - 如何在 C 中为字符串数组动态分配内存?

代码优化,C 代码不响应缓存阻塞

arrays - 从字符串数组中过滤掉空字符串

c# - 在 .Net 中改进 String.Insert?

c - 如何在 C 中将特定字符串与数组的所有元素进行比较?

c - 在 c 中使用 strtok 拆分字符串

C语言编程

c - 在 collat​​z 序列中,如 34,17..2,1,每行打印 40 个字符

c - 为什么使用正确的参数类型调用 strtok() 时会失败?

C pthread只允许四个线程执行函数