我有一段这样的代码:
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?非常感谢
答案 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);
}
希望这会有所帮助。祝你好运!