gpt4 book ai didi

c - 如何检查 optarg 的长度以及它是否为数字

转载 作者:太空宇宙 更新时间:2023-11-04 01:49:06 28 4
gpt4 key购买 nike

我正在使用 getopt 来解析传递给我的 c 程序的参数。我想在解析时检查 optarg 是否全是数字,但我不知道如何获取 optarg 中值的长度:

int opt;
unsigned short port;

while((opt = getopt(argc, argv, "p:")) != EOF) {

switch(opt) {
case 'p':
for(int i = 0; i < OPTARG_LENGTH; i++) {
if(!isnum[optarg[i]]) exit();
}
port = strtoul(optarg, NULL, 10);
break;
}

那么我如何找到 OPTARG_LENGTH 呢?

最佳答案

strlen(optarg) 会为您提供该信息,但不要尝试使用那种天真的方法检查整数值,让 strtoul 为您进行精确检查.

为此,您必须修改调用它的方式,以便在 char 指针上传递指针,以便 strtoul 指出错误(如果有)。

(例如,如果数字超过 unsigned long limit,你的支票就没用了)

另请注意,port 是一个无符号的短整数,因此您必须在分配之前执行额外的检查,否则会溢出。

char *temp;
unsigned long port_ul = strtoul(optarg,&temp,10);

if (optarg != temp && *temp == '\0' && port_ul <= USHRT_MAX) // needs #include <limits.h>
{
// argument is properly parsed: ok
port = port_ul;
}

检查分为 3 个部分:

  • 检查 *temp 是否确实指向字符串的末尾
  • 检查字符串是否为空(经常被遗忘,感谢 chux 在另一个答案中的提示)
  • 由于没有标准字符串到 unsigned short 转换,使用 limits.h 确保在分配给 unsigned short 时不会溢出。

关于c - 如何检查 optarg 的长度以及它是否为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47422883/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com