如何验证用户是否仅从命令行将整数值传递给getopt选项?用户应仅传递正整数值。
Isdigit(( 函数在这里无法正常工作。
case 's' :
flags=1;
start = atoi(optarg);
如何检查开始是否只包含整数值?
./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*