PDA

View Full Version : [C] malloc + sprintf di un messaggio generano un linefeed inaspettato..


santaclause83
06-09-2007, 12:42
devo concatenare tra loro:
->un int che rappresenta un numero da 0 a 10 per indicare al server un determinao codice operativo
->una stringa che indica un nome
->un int che indica la lughezza del dato successivo su cui operare
->la stringa che rappresenta il dato

per far questo :
1)faccio una malloc di due sizeof(char)*strlen delle stringhe da inviare + due sizeof(int) per il codice op. e la lunghezza della stringa-dato
2)poi con una sprintf concateno tutto insieme nell'ordine(codop.,nome,lunghezzadato,dato)

DEL TIPO:
char* invio;
if((invio = (char *)malloc(sizeof(char)*(strlen(par1)+strlen(par2))+sizeof(int)*2))==NULL){
printf("malloc per invio comando fallita,terminazione client");exit(1);}

sprintf(invio,"%d%s_%d%s",0,par1,strlen(par2),par2);


PROBLEMA:
se stampo su schermo tutto ok,a parte il fatto che viene inserito alla fine un LINE FEED che non dovrebe esserci e manda un po' a farsi benedire l'intera comunicazione

lo vedo perche' stampando tutto con un punto e virgola finale,il punto e virgola finisce a capo

sapete mica da dove possa essere generato e come potrei evitare?

grazie!

Alhazred
06-09-2007, 17:27
Vedi se anche cosė ti resta il ritorno a capo

char* invio;
int len;

if((invio=(char*)malloc(sizeof(char)*(strlen(par1)+strlen(par2))+sizeof(int)*2)) == NULL) {
printf("errore");
exit(1);
}

sprintf(invio,"%d%s_%d%s",0,par1,strlen(par2),par2);
len = strlen(invio);
if(invio[len-1] == '\n')
invio[len-1] = 0;
//e poi usi "invio"
printf("%s",invio);