¿Cómo puedo obtener argv como int?

Tengo un trozo de código como este:

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

y en shell hago esto:

./test 7

pero el primer resultado de printf no es 7, ¿cómo puedo obtener argv [] como int? muchas gracias

argv[1] es un puntero a una cadena.

Puede imprimirlo usando: printf("%s\n", argv[1]);

Para obtener un entero de una cadena, primero tiene que convertirlo. Utilice strtol para convertir una cadena a un int .

 #include  // for errno #include  // for INT_MAX #include  // for strtol char *p; int num; errno = 0; long conv = strtol(argv[1], &p, 10); // Check for errors: eg, 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); } 

Puedes usar strtol para eso:

 long x; if (argc < 2) /* handle error */ x = strtol(argv[1], NULL, 10); 

Alternativamente, si está utilizando C99 o mejor, puede explorar strtoimax .

La función “string to long” ( strtol ) es estándar para esto. Uso básico:

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

Dado que usamos el sistema decimal, la base es 10. El argumento endptr se establecerá en el “primer carácter no válido”, es decir, el primer no dígito. Si no le importa, establezca el argumento en NULL lugar de pasar un puntero. Si no desea que se produzcan no dígitos, puede asegurarse de que esté configurado en el “terminador nulo” (a \0 termina las cadenas en C):

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

Como lo menciona la página de manual , puede usar errno para verificar que no se hayan producido errores (en este caso, desbordamientos o subdesbordos).

 #include  #include  char* p; errno = 0; int arg = strtol(argv[1], &p, 10); if (*p != '\0' || errno != 0) return 1; // Everything went well printf("%d", arg); 

Más allá de esto, puede implementar verificaciones personalizadas: probar si el usuario pasó un argumento en absoluto; prueba si el número está dentro de los rangos permitidos; etc.

Puede usar la función int atoi (const char * str); .
#include incluir #include y usar la función de esta manera:
int x = atoi(argv[1]);
Aquí más información si es necesario: atoi – C ++ Reference

 /* Input from command line using atoi, and strtol */ #include //printf, scanf #include //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); } 

Espero que esto ayude. ¡Buena suerte!