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

Ayuda con sprintf

Estas en el tema de Ayuda con sprintf en el foro de C/C++ en Foros del Web. Hola, tengo problemas con sprintf, y no se que hacer ya, tengo este trozo de código: Código: void InsertarDatos(void *arg) { Email *nuevo; char *cuerpo; ...
  #1 (permalink)  
Antiguo 12/11/2009, 08:52
 
Fecha de Ingreso: octubre-2008
Mensajes: 44
Antigüedad: 15 años, 6 meses
Puntos: 1
Ayuda con sprintf

Hola, tengo problemas con sprintf, y no se que hacer ya, tengo este trozo de código:
Código:
void InsertarDatos(void *arg)
{
	Email *nuevo;	
	char *cuerpo;
	
	pthread_mutex_lock(&b->mutex);  //protegiendo la región crítica
	(b->nEmails)++;
	cuerpo=(char *) malloc (sizeof (char));
	nuevo=(Email *) malloc (sizeof (Email));
	nuevo->dato.id=b->nEmails;
	nuevo->dato.from="xxxx";
	sprintf(cuerpo,"Cuerpo del email %d",b->nEmails);
	nuevo->dato.body=cuerpo;
	nuevo->next=NULL;
        .......
Cuando ejecuto obtengo:
Identificador de email: 12576
Remitente: xxxx
Cuerpo del mensaje: Cuerpo del email 1
---------------------------------------
Identificador de email: 12832
Remitente: xxxx
Cuerpo del mensaje: Cuerpo del email 2
---------------------------------------

Y debería ser Identificador de email: 1 y luego 2.
He estado depurando y si miro la variable nuevo->dato.id despues de nuevo->dato.id=b->nEmails; lo saca bien pero despues de hacer el sprintf me saca los otros valores.

A que se debe esto??

Agradecería vuestra ayuda.
  #2 (permalink)  
Antiguo 12/11/2009, 13:23
 
Fecha de Ingreso: mayo-2009
Mensajes: 106
Antigüedad: 15 años
Puntos: 1
Respuesta: Ayuda con sprintf

sprintf devuelve un entero con la longitud de la cadena, no creo que por eso te de el error
Código C++:
Ver original
  1. int tamCadena;
  2. tamCadena=sprintf(cuerpo,"Cuerpo del email %d",b->nEmails);

lo que tambien te recomiendo es que en el foramto de sprintf solo use el "%d" y despues el resultado que te de lo concatenes para que te quede como quieres

saludos
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 16:50.