我怎样才能将argv []作为int?

时间:2012-03-17 08:16:03

标签: c

我有一段这样的代码:

int main (int argc, char *argv[]) 
{
   printf("%d\t",(int)argv[1]);
   printf("%s\t",(int)argv[1]);
}

在shell中我这样做:

./test 7

但是第一个printf结果不是7,我如何将argv []作为int?非常感谢

5 个答案:

答案 0 :(得分:31)

argv[1]是指向字符串的指针。

您可以使用以下代码进行打印:printf("%s\n", argv[1]);

要从首先转换它的字符串中获取整数。使用strtol将字符串转换为int

#include <errno.h>   // for errno
#include <limits.h>  // for INT_MAX
#include <stdlib.h>  // for strtol

char *p;
int num;

errno = 0;
long conv = strtol(argv[1], &p, 10);

// Check for errors: e.g., the string does not represent an integer
// or the integer is larger than int
if (errno != 0 || *p != '\0' || conv > INT_MAX) {
    // Put here the handling of the error, like exiting the program with
    // an error message
} else {
    // No error
    num = conv;    
    printf("%d\n", num);
}

答案 1 :(得分:13)

您可以使用strtol

long x;
if (argc < 2)
    /* handle error */

x = strtol(argv[1], NULL, 10);

或者,如果您使用的是C99或更高版本,则可以浏览strtoimax

答案 2 :(得分:9)

&#34;字符串为long&#34; (strtol)函数是此标准。基本用法:

#include <stdlib.h>

int arg = strtol(argv[1], NULL, 10);
// string to long(string, endptr, base)

由于我们使用十进制系统,因此base为10. endptr参数将被设置为&#34;第一个无效字符&#34;,即第一个非数字。如果您不在乎,请将参数设置为NULL,而不是传递指针。如果您不希望发生非数字,您可以确保将其设置为&#34; null终结符&#34; (a \0终止C)中的字符串:

#include <stdlib.h>

char* p;
int arg = strtol(argv[1], &p, 10);
if (*p != '\0') // an invalid character was found before the end of the string

正如man page提到的那样,您可以使用errno检查没有发生错误(在这种情况下是溢出或下溢)。

#include <stdlib.h>
#include <errno.h>

char* p;
errno = 0;
int arg = strtol(argv[1], &p, 10);
if (*p != '\0' || errno != 0) return 1;

// Everything went well
printf("%d", arg);

除此之外,你可以实现自定义检查:测试用户是否完全传递参数;测试数字是否在允许的范围内;等

答案 3 :(得分:4)

您可以使用int atoi (const char * str);功能。
您需要包含#include <stdlib.h>并以这种方式使用此功能:
int x = atoi(argv[1]);
更多需要时提供的信息:atoi - C++ Reference

答案 4 :(得分:0)

/*

    Input from command line using atoi, and strtol 
*/

#include <stdio.h>//printf, scanf
#include <stdlib.h>//atoi, strtol 

//strtol - converts a string to a long int 
//atoi - converts string to an int 

int main(int argc, char *argv[]){

    char *p;//used in strtol 
    int i;//used in for loop

    long int longN = strtol( argv[1],&p, 10);
    printf("longN = %ld\n",longN);

    //cast (int) to strtol
    int N = (int) strtol( argv[1],&p, 10);
    printf("N = %d\n",N);

    int atoiN;
    for(i = 0; i < argc; i++)
    {
        //set atoiN equal to the users number in the command line 
        //The C library function int atoi(const char *str) converts the string argument str to an integer (type int).
        atoiN = atoi(argv[i]);
    }

    printf("atoiN = %d\n",atoiN);
    //-----------------------------------------------------//
    //Get string input from command line 
    char * charN;

    for(i = 0; i < argc; i++)
    {
        charN = argv[i];
    }

    printf("charN = %s\n", charN); 

}

希望这会有所帮助。祝你好运!