防止用户将负数传递给接受 unsigned int 的函数

2024-04-11

所以这是代码:

int create_mask(unsigned b, unsigned e)
{
  unsigned int mask=1;

  if(b<e || b<0 || e<0)
  {
    printf("Wrong values, starting bit can't be smaller than ending.\n");
    printf("Both got to be >= 0.\n");
    exit(EXIT_FAILURE);
  }
  while(b>0)
  {
    printf("%u\n", b);
    mask<<=1;
    if(b>e)
      mask|=1;
    b--;
  }

  return ~mask; /* negates mask for later purpose that is clearing corresponding bits */
}

函数为某些位操作创建掩码,但应采用两个非负的无符号整数 b 和 e。问题是如何防止用户输入负数? 当使用 (-1,0) 调用函数时,它会启动循环,并应错误退出。


您可以只输入一个字符串,检查它是否包含'-'字符,如果存在则产生错误。否则,您将其转换为无符号整数并继续。 (读取为字符串,然后用strtoul()优于使用scanf()无论如何,尤其是当你不知道所有的怪癖时scanf().)

char buf[LINE_MAX];
fgets(buf, sizeof buf, stdin);

if (strchr(buf, '-') != NULL) {
    fprintf(stderr, "input must be non-negative!\n");
    exit(-1);
}

unsigned int n = strtoul(buf, NULL, 0);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止用户将负数传递给接受 unsigned int 的函数 的相关文章

随机推荐