[英]Strtol() function basic c
当我使用strtol()
函数时,当我尝试转换时:
2015-08-12
我希望转换失败而不是仅转换2015
吗?
int main(int argc, char *argv[])
{
printf("Number of arguments: %d\n", argc);
int i = 1;
while (argc > i)
{
char *p;
int num;
errno = 0;
long conv = strtol(argv[i], &p, 10);
// Check for errors: e.g., the string does not represent an integer
// or the integer is larger than int
if (errno != 0 || *p != '\0' || conv > INT_MAX)
{
printf("this is word:%s\n ",p);
//printf("chyba");
}
else
{
// No error
num = conv;
printf("this is number: %d\n", num);
}
i = i + 1;
}
return 0;
}
否,因为strol()
等会转换匹配的初始子字符串。 但是,如果要在字符串的其余部分再次调用它,则需要去除破折号,否则它们将被解释为减号。
出现strtol()
不能转换文本2015
的原因是因为您希望该行的终止字符为'\\0'
if (errno != 0 || *p != '\0' || conv > INT_MAX)
但2015-08-26
的文字2015
以'-'
字符终止。
所以我建议将线更改为
if (errno != 0 || (*p != '\0' && *p != '-') || conv > INT_MAX)
还有其他解决方法:您的代码不会将日期分成几个部分。 您可以使用strtok()
做到这一点,但这不是您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.