假设我有以下代码:
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
手册。
你也可以考虑让n
和unsigned 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。
希望这对你有帮助
谢谢