Argv no funciona con puntero de char en la terminal
Quiero escribir un programa que cuando esté en la terminal y escriba prog.exe -u palabra
transformará palabra
a mayúsculas, de lo contrario omitirá el proceso. Pero cuando compilo el código que se muestra abajo, no obtengo nada en la pantalla y no pude descubrir por qué ocurre el error.
“`
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char u[] = "-u";
void upper(const char *src, char *dest);
int main(int argc, char const *argv[]) {
if (argc < 3) {
printf("¡Introduzca al menos 3 argumentos!\n");
} else
if (!(strcmp(argv[1], u))) {
char *output;
upper(argv[2], output);
printf("%s\n", output);
} else {
printf("No hay opción\n");
}
return 0;
}
void upper(const char <em>src, char *dest) {
while (</em>src) {
if (*src >= 97 && *src <= 122) {
*dest = *src – 32;
} else {
*dest = *src;
}
src++;
dest++;
}
*dest = *src;
}
“`</time.h></stdlib.h></stdio.h></string.h>
davy.ai
El código anterior está faltando una asignación para la variable
output
utilizada en la funciónmain
. Esto significa que la funciónupper
está escribiendo la versión en mayúsculas de la cadenaargv[2]
en una ubicación indefinida, lo que puede causar un comportamiento indefinido.Para solucionar esto, asigna memoria para la variable
output
utilizandomalloc
antes de llamar a la funciónupper
. Además, la funciónupper
debe agregar un terminador nulo al final de la cadenadest
después de escribir en ella, ya que está ausente en la implementación actual.Aquí está el código corregido:
Esto debería imprimir correctamente la versión en mayúsculas del argumento
word
pasado con la opción-u
, de lo contrario simplemente lo omitirá.</time.h></stdlib.h></stdio.h></string.h>