C语言 从getopt转换参数



假设我有以下代码:

size_t n;  // my parameter
while((c = getopt(argc, argv, "n:")) != -1) {
  switch(c) {
  case 'n':
    n = optarg; // <=== HERE
    break;
  default:
    abort ();
  }
}

我正在使用getopt GNU C函数解析命令行参数。如果n数据类型为size_t(无符号整数)…

我应该如何转换这个值?我应该使用strtol强制转换吗?

调用strtol不是强制转换,但这可能是您想要做的。(strtoul更有可能)

两者都接受负数(即使strtoul产生unsigned long),所以您可能需要在调用转换函数之前做一些错误检查。

详细信息请阅读man strtoul手册。

你也可以考虑让nunsigned long代替size_t

可以使用

1. atoi(str)
2. atol(str)
3. atoll(str)

相当于

(int) strtol(nptr,(char **)NULL, 10)
strtol(nptr,(char **)NULL, 10)
strtoll(nptr, (char **)NULL, 10)

如果需要结束指针(检查是否有更多字符要读取,或者实际上是否已经读取了任何字符)或基数不是10,则使用strtol。

最好使用strtol/ll,因为它有助于了解转换失败的原因,而atoi/l/ll只返回0。

希望这对你有帮助

谢谢

相关内容

  • 没有找到相关文章

最新更新