Foros del Web » Programación para mayores de 30 ;) » C/C++ »

usando funciones strcat y sprintf a la vez

Estas en el tema de usando funciones strcat y sprintf a la vez en el foro de C/C++ en Foros del Web. hola necesito ayuda para un codigo que concatene cadenas de caracteres. Estoy usando sprintf para generar las cadenas con valores variables, para luego concaenar esta ...
  #1 (permalink)  
Antiguo 28/03/2009, 16:21
 
Fecha de Ingreso: enero-2009
Mensajes: 14
Antigüedad: 15 años, 3 meses
Puntos: 0
usando funciones strcat y sprintf a la vez

hola

necesito ayuda para un codigo que concatene cadenas de caracteres. Estoy usando sprintf para generar las cadenas con valores variables, para luego concaenar esta cadena usando strcat.

el problema es q me complican los punteros.

#include <stdio.h>
#include <string.h>

int main()
{
unsigned char s1[20] = "Hola ";
char s2[10];
int num=5;

sprintf(s2,"amigos %d",num)


strcat( s1, s2 );//aqui es el problema, hay drama con punteros

printf( "s1=%s\n", s1 );

return 0;
}


algo esta mal. agradeceria su ayuda.

saludos
  #2 (permalink)  
Antiguo 28/03/2009, 18:05
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: usando funciones strcat y sprintf a la vez

A mi me parecen raras varias cosas:
¿Para que unsigned en s1? Si fuera (signed, por defecto) char strcat compilaria tambien en C++.
¿Para que usar dos cadenas? Cuidado con las cadenas de tamaño fijo, en sprintf (mira la documentacion o snprintf si la tenes disponible para evitarlo) podes obtener una cadena mas o menos larga dependiendo de los parametros variables y strcat no comprueba si hay espacio suficiente para concatenar (strncat es mas seguro).
Te falta el ; en el sprintf.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 28/03/2009, 21:20
 
Fecha de Ingreso: enero-2009
Mensajes: 14
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: usando funciones strcat y sprintf a la vez

gracias por responder.

sobre el unsigned, pude q sea innecesario, igual creo q compila el rpograma.

sobre los valores variables, tengo contemplado el peor caso, osea el valor mas largo posible.

este prgrama lo escribi en fprma rapida para darme aentender solamente.por eso hay errorcillos.

la idea principales que, fuera de todo esto, sprintf trabaja con cadenas declaradas como:

char cadena[n];

en cambio strcat necesita que le entregue un puntero a cadena de caracteres, es ahi donde me cuesta combinar ambas funciones.

nueva version

#include <stdio.h>
#include <string.h>

int main()
{
char s1[20] = "hola";
char s2[10];
int num=2009;

sprintf(s2,"año %d",num)


strcat( s1, s2 );//ojo...aqui se me jode todo. si declaro puntero a s2, se
//jode sprintf

printf( "s1=%s\n", s1 );

return 0;
}
  #4 (permalink)  
Antiguo 29/03/2009, 01:52
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: usando funciones strcat y sprintf a la vez

Si, con el unsigned compila en C, en C++ no.

No, no es correcto, en ambos casos funciona ya que trabajan las dos funciones con un puntero a caracter (char*) y un array se pasa por referencia. Mejor compilalo y proba ... las dos funciones reciben el mismo tipo de parametro: puntero a caracter.

int sprintf ( char * str, const char * format, ... );
char * strcat ( char * destination, const char * source );


Otra cosa es que erroneamente pongas char *s2; y esperes que funcione ... eso es un puntero a una zona de memoria indefinida y muy probablemente invalida.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 31/03/2009, 14:05
 
Fecha de Ingreso: enero-2009
Mensajes: 14
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: usando funciones strcat y sprintf a la vez

estimado, el problema justamente es ese, no compila.
  #6 (permalink)  
Antiguo 31/03/2009, 16:03
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: usando funciones strcat y sprintf a la vez

Y ... ese codigo sin el ; como ya te dije no, no compila ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:36.