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/