elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Arreglos,punteros y sprintf.-
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Arreglos,punteros y sprintf.-  (Leído 2,839 veces)
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Arreglos,punteros y sprintf.-
« en: 12 Diciembre 2013, 21:46 pm »

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.-



Código
  1. #include <stdio.h>
  2.  
  3. #define MAX 30
  4.  
  5. int main(void){
  6. char nombre_completo[93], *ptrNC = nombre_completo,
  7. primer_nombre[MAX+1], *ptrPN = primer_nombre,
  8. segundo_nombre[MAX+1], *ptrSN = segundo_nombre,
  9. apellido[MAX+1], *ptrAP = apellido;
  10. int longitud;
  11.  
  12. printf("\n\n Ingrese primer nombre.....: ");
  13. fgets(ptrPN, MAX, stdin);
  14. printf("\n Ingrese segundo nombre....: ");
  15. fgets(ptrSN, MAX, stdin);
  16. printf("\n Ingrese apellido..........: ");
  17. fgets(ptrAP, MAX, stdin);
  18.  
  19. longitud = sprintf(ptrNC, "%s %s %s", ptrPN, ptrSN, ptrAP);
  20.  
  21. printf("\n El nombre completo es: %s.\n", ptrNC);
  22. printf("\n Total de caracteres..: %d", longitud);
  23.  
  24. return 0;
  25. }
  26.  

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 Desconectado

Mensajes: 438


Ver Perfil
Re: Arreglos,punteros y sprintf.-
« Respuesta #1 en: 12 Diciembre 2013, 23:16 pm »

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:

Código
  1. printf("\n\n Ingrese primer nombre.....: ");
  2. fgets(ptrPN, MAX, stdin); // ptrPN="Pepe\n"
  3. 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 Desconectado

Mensajes: 145



Ver Perfil
Re: Arreglos,punteros y sprintf.-
« Respuesta #2 en: 13 Diciembre 2013, 14:12 pm »

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 Desconectado

Mensajes: 1.639


Ver Perfil
Re: Arreglos,punteros y sprintf.-
« Respuesta #3 en: 13 Diciembre 2013, 16:52 pm »

Código
  1. #define MAX 30
  2.  
  3. int main(void){
  4. char nombre_completo[93], *ptrNC = nombre_completo,
  5. primer_nombre[MAX+1], *ptrPN = primer_nombre,
  6. segundo_nombre[MAX+1], *ptrSN = segundo_nombre,
  7. apellido[MAX+1], *ptrAP = apellido;
  8. int longitud;
  9.  
  10. printf("\n\n Ingrese primer nombre.....: ");
  11. fgets(ptrPN, MAX, stdin);
  12.  
  13. /* ... */
  14. }
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 Desconectado

Mensajes: 145



Ver Perfil
Re: Arreglos,punteros y sprintf.-
« Respuesta #4 en: 13 Diciembre 2013, 17:50 pm »

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.-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[AYUDA] Warning: sprintf() [function.sprintf]: Too few arguments
PHP
Rudy21 3 5,647 Último mensaje 30 Julio 2008, 15:51 pm
por Ertai
problema con sprintf()
Programación C/C++
m@o_614 1 1,730 Último mensaje 25 Septiembre 2013, 19:30 pm
por rir3760
[C] (Consulta) Mezclando punteros y arreglos.
Programación C/C++
class_OpenGL 5 4,603 Último mensaje 16 Mayo 2016, 18:51 pm
por class_OpenGL
Asunto con punteros y arreglos en c
Programación C/C++
Jay 4 2,101 Último mensaje 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 Último mensaje 2 Junio 2020, 19:37 pm
por RayR
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines