如果字符串的第一部分为 0,则 strtok() 忽略 0 值
strtok() ignoring 0 values if first part of string is 0
我有以下代码,它从命令行获取一个字符串参数,并且应该首先将其拆分为两个单独的字符串,然后将它们中的每一个转换为整数值:
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
创建的缩短字符串作为分隔符。
我有以下代码,它从命令行获取一个字符串参数,并且应该首先将其拆分为两个单独的字符串,然后将它们中的每一个转换为整数值:
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
创建的缩短字符串作为分隔符。