首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Strtol()函数基本c

Strtol()函数基本c
EN

Stack Overflow用户
提问于 2015-10-13 01:57:14
回答 2查看 369关注 0票数 0

当我使用strtol()函数时,当我尝试转换时:

代码语言:javascript
运行
复制
2015-08-12

我希望它转换失败,而不是只转换2015

代码语言:javascript
运行
复制
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;
}
EN

回答 2

Stack Overflow用户

发布于 2015-10-13 02:35:29

不是,因为strol()等会转换匹配的初始子字符串。但是,如果要在字符串的其余部分再次调用它,则需要去掉破折号,否则它们将被解释为减号。

票数 0
EN

Stack Overflow用户

发布于 2015-10-13 03:01:05

strtol()没有转换文本2015的原因是您希望此行中的终止字符为'\0'

代码语言:javascript
运行
复制
if (errno != 0 || *p != '\0' || conv > INT_MAX)

但是2015-08-26中的文本2015'-'字符结尾。

因此,我建议将行更改为

代码语言:javascript
运行
复制
if (errno != 0 || (*p != '\0' && *p != '-') || conv > INT_MAX)

还有其他方法可以解决这个问题:您的代码不会将日期拆分为不同的部分。您可以使用strtok()来完成此操作,但这不是您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33087362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档