es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Usuario C entrada dinámica con argv.

Intento tomar una entrada de usuario de longitud máxima desconocida desde la línea de comandos. El programa necesita recibir una entrada dinámica de una cadena de caracteres (¿tal vez un arreglo de caracteres?). El resultado debería ser algo como:

./a.out st1
tu cadena es …

El único código que pude crear es el siguiente:

int main (int argc, char* argv[]){
    ...
    char str1[];
    str1 = argv[1];
    printf("tu...");
    ...
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para tomar la entrada del usuario de longitud desconocida desde la línea de comandos en C, necesitarías asignar memoria dinámicamente con malloc() según la longitud de la cadena de entrada. Aquí tienes un ejemplo de código:

    int main (int argc, char* argv[]) {
        char *input_str = NULL; // inicializar input_str como puntero nulo
        if (argc > 1) {
            int len = strlen(argv[1]);
            input_str = malloc(len + 1); // asignar memoria para input_str
            strncpy(input_str, argv[1], len); // copiar el argumento a input_str
            input_str[len] = '\0'; // agregar terminador nulo
            printf("Tu cadena de entrada es: %s\n", input_str);
            free(input_str); // liberar memoria
        } else {
            printf("No se proporcionó ninguna entrada.\n");
        }
        return 0;
    }
    

    En este código, primero verificamos si se ha proporcionado al menos un argumento en la línea de comandos usando if (argc > 1). Si hay un argumento, calculamos su longitud usando strlen() y asignamos suficiente memoria usando malloc() para almacenar la cadena. Luego, copiamos el argumento a la memoria asignada dinámicamente usando strncpy(), agregamos un terminador nulo al final de la cadena usando input_str[len] = '\0' e imprimimos la cadena de entrada usando printf(). Finalmente, liberamos la memoria usando free() para evitar fugas de memoria. Si no se proporciona ningún argumento, imprimimos un mensaje que indica que no se proporcionó ninguna entrada.

    Ten en cuenta que en el código que proporcionaste, no puedes declarar char str1[]; sin especificar su tamaño. Si quieres usar un arreglo de tamaño fijo, puedes declarar char str1[MAX_LENGTH]; y limitar la longitud máxima de la entrada del usuario. Sin embargo, este enfoque no es flexible si no conoces la longitud máxima de la cadena de entrada.

Comments are closed.