[英]How to check for length of optarg and if it is numeric
我使用getopt
來解析傳遞給我的c程序的參數。 我想在解析它時檢查optarg
是否全部正確,但我不知道如何在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
指出錯誤,如果有的話。
(例如,如果數字超過未簽名的長期限制,則您的支票無效)
另請注意, 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
實際上是否指向字符串的結尾 limits.h
來確保在分配給unsigned short時沒有溢出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.