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

标签 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 等值。

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

最佳答案

这一行:

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

应该是:

tmp = strtok(NULL, ":");

您当前正在传递 原始字符串 由第一次调用 strtok 创建的缩短字符串作为分隔符。

关于c - 如果字符串的第一部分为 0,则 strtok() 忽略 0 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698758/

相关文章:

c++ - 在 C++ 中使用 strtok 解析命令行参数

c - 如何在 C 中将字符串类型转换为整数并将其存储在整数数组中?

c - 如何在 Visual Studio 中编写自己的 DLL,C 语言(不是 C++)

c - 使用 lfind 检索元素的索引

c - strtok() 读取字符串末尾的空格并且不返回 NULL

c - strtok 和 strcpy 错误

c - 如何在C中搜索枚举类型

c - 如何设置 Autoconf 项目以使用 GTK 进行制作?

c - C strtok() 中的字符串拆分

c - strtok 问题,它没有按预期工作