如果字符串的第一部分为0,则strtok()忽略0值

时间:2018-06-05 11:17:13

标签: c strtok

我有以下代码从命令行获取字符串参数,并且应该首先将其拆分为两个单独的字符串,然后,将它们中的每一个转换为整数值:

int numOne = 0, numTwo = 0;
char *tmp, *end;

tmp = strtok(argv[1], ":");
numOne = strtol(tmp, &end, 10);
if (errno == ERANGE) {
    printf("range error\n");
    break;
}
while (tmp != NULL) {
    numTwo = strtol(tmp, &end, 10);
    if (errno == ERANGE) {
        printf("range error\n");
        break;
    }
    tmp = strtok(NULL, argv[1]);
}

问题是:如果CL参数看起来像“1:500”,则此代码可以正常工作。但是,如果它是“0:500”,则存储在numOne和numTwo中的值分别为0和5。如果第一个值为0,则strtok()似乎忽略了任何0值,而我在numTwo中永远不会得到50,500,5000等值。

请帮助我理解为什么会这样,以及如何解决它。谢谢!

1 个答案:

答案 0 :(得分:2)

这一行:

tmp = strtok(NULL, argv[1]);

应该是:

tmp = strtok(NULL, ":");

您目前正在通过第一次调用strtok创建的原始字符串缩短字符串作为分隔符。