La "cadena larga a la" función (strtol
) es estándar para esto. El uso básico:
#include <stdlib.h>
int arg = strtol(argv[1], NULL, 10);
// string to long(string, endptr, base)
Debido a que utilizamos 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ígitos. Si no le importa, establezca el argumento en NULL
en lugar de pasar un puntero. Si no desea que los no-dígitos que se produzca, puede asegurarse de que está establecido en el "terminador nulo" (un \0
termina cadenas en 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
A medida que el man page menciones, puede utilizar errno
a compruebe que no haya errores (en este caso, desbordamientos o subdesbordamientos).
#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);
Además, puede implementar comprobaciones personalizadas: comprobar si el usuario pasó un argumento; probar si el número está en rangos permitidos; etc.
Sé que cnicutar ya dio la respuesta, pero ayuda a comprender lo que está sucediendo. ¿Sabes qué argv [1] es exactamente? Quiero decir, ¿puedes explicar por qué obtienes la producción que obtienes? –
En mi opinión, argv [0] es el comando en sí y argv [1] es el primer parámetro que ingreso. En este caso es 7. – Michael
Sí, es correcto, pero ¿qué es? ¿Que tipo? ¿Qué puedes hacer con eso? ¿Por qué obtienes el resultado que obtienes en el ejemplo anterior? ¿Puedes hacer una adición o multiplicación con él, y qué sucede si el usuario no escribe un número, sino './test seven' o algo así? –