整数值和负值的 getopt 错误处理
getopt error handling for integer values and negative values
如何验证用户是否仅将整数值从命令行传递给 getopt 选项?用户应仅传递正整数值。
Isdigit() 函数在这里无法正常工作。
case 's' :
flags=1;
start = atoi(optarg);
如何检查 start 是否只包含整数值?
./prog -scf
默认情况下,当输入任何字符时,它的 s 值为 0,因为我使用的是 atoi 函数,但实际上它应该在传递 cf 时给出错误。
甚至尝试过 strtol() ,但没有用
start = (int) strtol(optarg, &ptr, 10);
即使我使用 strtol() 函数,它也只有在同时传递数字和字符串时才有效。
eg ./prog -s5abc --> this works
eg ./prog -sabc -->does not work
这里再次开始采用 0 值,因为只通过了章程!但是如果用户本身传递 0 那么我该如何处理错误?
eg ./prog -s0 --> s takes 0 value, valid
eg ./prog -sabc --> s takes 0 value , but invalid
当您使用带符号的数字时,应该这样做:
if (optarg[0] != '-' && (optarg[0] < '0' || optarg[0] > '9'))
*error handling*
for (size_t i = 1; optarg[i] != 0; i++)
if (optarg[i] < '0' || optarg[i] > '9')
*error handling*
如何验证用户是否仅将整数值从命令行传递给 getopt 选项?用户应仅传递正整数值。
Isdigit() 函数在这里无法正常工作。
case 's' :
flags=1;
start = atoi(optarg);
如何检查 start 是否只包含整数值?
./prog -scf
默认情况下,当输入任何字符时,它的 s 值为 0,因为我使用的是 atoi 函数,但实际上它应该在传递 cf 时给出错误。
甚至尝试过 strtol() ,但没有用
start = (int) strtol(optarg, &ptr, 10);
即使我使用 strtol() 函数,它也只有在同时传递数字和字符串时才有效。
eg ./prog -s5abc --> this works
eg ./prog -sabc -->does not work
这里再次开始采用 0 值,因为只通过了章程!但是如果用户本身传递 0 那么我该如何处理错误?
eg ./prog -s0 --> s takes 0 value, valid
eg ./prog -sabc --> s takes 0 value , but invalid
当您使用带符号的数字时,应该这样做:
if (optarg[0] != '-' && (optarg[0] < '0' || optarg[0] > '9'))
*error handling*
for (size_t i = 1; optarg[i] != 0; i++)
if (optarg[i] < '0' || optarg[i] > '9')
*error handling*