how to take integers as command line arguments?

后端 未结 7 1682
面向向阳花
面向向阳花 2020-12-08 10:52

I\'ve read a getopt() example but it doesn\'t show how to accept integers as argument options, like cvalue would be in the code from the example:



        
相关标签:
7条回答
  • 2020-12-08 11:22

    Use atoi.

    cvalue = atoi( optarg );
    

    And declare cvalue as an int.

    0 讨论(0)
  • 2020-12-08 11:23

    You need to use atoi() to convert from string to integer.

    0 讨论(0)
  • 2020-12-08 11:27

    atoi(), which means ascii to integer is the function to use. Similarly, atof() can be used to get float values.

    0 讨论(0)
  • 2020-12-08 11:27

    In this situation i would go for a sscanf().

    0 讨论(0)
  • 2020-12-08 11:30

    All of the answers above are broadly correct (Vikram.exe gets props for explaining why you have to call a library function, which nobody else bothered to do). However, nobody has named the correct library function to call. Do not use atoi. Do not use sscanf.

    Use strtol, or its relative strtoul if you don't want to allow negative numbers. Only these functions give you enough information when the input was not a number. For instance, if the user types

    ./a.out 123cheesesandwich
    

    atoi and sscanf will cheerfully return 123, which is almost certainly not what you want. Only strtol will tell you (via the endptr) that it processed only the first few characters of the string.

    (There is no strtoi, but there is strtod if you need to read a floating-point number.)

    0 讨论(0)
  • 2020-12-08 11:32

    As you have already used in your code, the prototype for main function is

    int main (int argc, char** argv)

    What ever arguments are provided as command line arguments, they are passed to your 'program' as an array of char * (or simply strings). so if you invoke a prog as foo.exe 123, the first argument to foo.exe will be a string 123 and not an integer value of 123.

    If you try casting the argument to integer (as you said) probably using some thing like: (int) argv[1], you will not get the integer value of first argument, but some memory address where the first arg is stored in your address space. To get an integer value, you must explicitly convert string value to integer value. For this, you can use atoi function. Check THIS man page for similar functions that can be used for conversion.

    0 讨论(0)
提交回复
热议问题