Los errores principales son dos:
* Utilizas el puntero "saludo" sin inicializar:
char* saludo;
/* ... */
Debes reservar un bloque de memoria, almacenar la dirección de este en esa variable y solo entonces la utilizas (sin validaciones):
char *saludo;
/* ... */
* La función strncpy copia como máximo el numero de caracteres indicado pero, si copia el máximo, no agrega el '\0'. Bien verificas el numero de caracteres de antemano (lo cual pone fuera de lugar el uso de esa función) o agregas el '\0' de forma manual. Por lo anterior es mejor utilizar sprintf, de esta forma:
char *copySaludo
= malloc(n
+ 1); sprintf(copySaludo
, "%.*s", n
, saludo
); printf("Las %d primeras letras: \"%s\"\n", n
, copySaludo
);
----
Ademas de eso hay otras cosas que, sin ser errores, deberías cambiar en el programa como eliminar el uso de "sizeof(char)" (este siempre es igual a uno) y cambiar el uso de gets por fgets. Mas información en la pagina
|Lo que no hay que hacer en C/C++. Nivel basico|.
Un saludo