Autor
|
Tema: Arreglos,punteros y sprintf.- (Leído 2,839 veces)
|
DanielPy
Desconectado
Mensajes: 145
|
Hola a todos. Estoy estudiando punteros y me encuentro con este inconveniente que no puedo resolver, bueno no les doy más explicaciones porque en la captura queda claro que en la cadena concatenada me está tomando el salto de línea de las cadenas individuales, eso es lo que deseo resolver.- #include <stdio.h> #define MAX 30 int main(void){ char nombre_completo[93], *ptrNC = nombre_completo, primer_nombre[MAX+1], *ptrPN = primer_nombre, segundo_nombre[MAX+1], *ptrSN = segundo_nombre, apellido[MAX+1], *ptrAP = apellido; int longitud; printf("\n\n Ingrese primer nombre.....: "); fgets(ptrPN , MAX , stdin ); printf("\n Ingrese segundo nombre....: "); fgets(ptrSN , MAX , stdin ); printf("\n Ingrese apellido..........: "); fgets(ptrAP , MAX , stdin ); longitud = sprintf(ptrNC , "%s %s %s", ptrPN , ptrSN , ptrAP ); printf("\n El nombre completo es: %s.\n", ptrNC ); printf("\n Total de caracteres..: %d", longitud ); return 0; }
Saludos. Daniel
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
xiruko
Desconectado
Mensajes: 438
|
Eso te ocurre porque fgets() también guarda el salto de línea en el bufer que le pases como parámetro. Una manera de solucionar esto podría ser eliminar el salto de línea '\n' del final de la cadena después de cada fgets(). Por ejemplo: printf("\n\n Ingrese primer nombre.....: "); fgets(ptrPN , MAX , stdin ); // ptrPN="Pepe\n" ptrPN [strlen(ptrPN )-1]='\0'; // ptrPN="Pepe"
No te olvides de incluir string.h si usas la función strlen(). Saludos.
|
|
|
En línea
|
|
|
|
DanielPy
Desconectado
Mensajes: 145
|
Hola xiruko. Muchas gracias y me complace mucho cuando las respuestas son tan completas.-( detalles del porqué, código, librería(s) ).- Saludos. Daniel
|
|
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
#define MAX 30 int main(void){ char nombre_completo[93], *ptrNC = nombre_completo, primer_nombre[MAX+1], *ptrPN = primer_nombre, segundo_nombre[MAX+1], *ptrSN = segundo_nombre, apellido[MAX+1], *ptrAP = apellido; int longitud; printf("\n\n Ingrese primer nombre.....: "); fgets(ptrPN , MAX , stdin ); /* ... */ }
No es necesario declarar los arrays con un carácter adicional ya que al llamar a fgets su segundo argumento indica el numero máximo de caracteres a almacenar y ello incluye el '\0'. En otras palabras los puedes declarar con MAX caracteres sin ningún problema. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
DanielPy
Desconectado
Mensajes: 145
|
Hola rir3760. Gracias por el aporte, evidentemente no me informé lo suficiente sobre el prototipo de fgets.- Saludos. Daniel
|
|
« Última modificación: 13 Diciembre 2013, 17:52 pm por DanielC# »
|
En línea
|
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[AYUDA] Warning: sprintf() [function.sprintf]: Too few arguments
PHP
|
Rudy21
|
3
|
5,647
|
30 Julio 2008, 15:51 pm
por Ertai
|
|
|
problema con sprintf()
Programación C/C++
|
m@o_614
|
1
|
1,730
|
25 Septiembre 2013, 19:30 pm
por rir3760
|
|
|
[C] (Consulta) Mezclando punteros y arreglos.
Programación C/C++
|
class_OpenGL
|
5
|
4,603
|
16 Mayo 2016, 18:51 pm
por class_OpenGL
|
|
|
Asunto con punteros y arreglos en c
Programación C/C++
|
Jay
|
4
|
2,101
|
5 Mayo 2019, 22:49 pm
por RayR
|
|
|
Duda con correspondencia entre arreglos y punteros en C++
Programación C/C++
|
retr02332
|
3
|
3,317
|
2 Junio 2020, 19:37 pm
por RayR
|
|