当我使用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;
}发布于 2015-10-13 02:35:29
不是,因为strol()等会转换匹配的初始子字符串。但是,如果要在字符串的其余部分再次调用它,则需要去掉破折号,否则它们将被解释为减号。
发布于 2015-10-13 03:01:05
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()来完成此操作,但这不是您的问题。
https://stackoverflow.com/questions/33087362
复制相似问题