|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Mar 2006
Messaggi: 131
|
[C]puntatore a stringa stampa stringhe diverse senza esser stato modificato..
alloco spazio e inizializzo un char* msg con una stringa con questo formato:
"PIDdelprocesso CONNECT nomeutente" per poi inviarla al server. PROBLEMA: proprio all'inizio quando inizializzo la variabile msg,se controllo come è stata inizializzata con delle stampe su schermo vedo che la prima stampa mi dà il messaggio pulito così come deve essere,ma poche righe sotto se ristampo la stringa vedo che è stato aggiunto un carattere indecifrabile alla fine la cosa strana è che tra le due stampe la variabile msg non è stata toccata,sotto il codice: //-->creazione messaggio "PID CONNECT USER",msg occupa lo spazio di " connect user"+sizeof(int) del pid if((msg = (char *)malloc(sizeof(char)*((strlen(argv[1])+strlen(" CONNECT ")+1))+sizeof(int)*1)) == NULL){ printf("malloc di msg fallita,terminazione client"); exit(1); } sprintf(msg,"%d",pid); strncat(msg," CONNECT ",strlen(" CONNECT ")); strncat(msg,utente,strlen(utente));//adesso msg == "PID CONNECT USER" printf("messaggio da inoltrare = %s;\n",msg);//stampa di controllo //regolare ----->sotto alloco lo spazio per il nome della pipe per le comunicazioni con il server [SERVERCLIENTPID] e ristampo la variabile msg per controllare,vedo che è stata modificata if((dir_letture = (char *)malloc(sizeof(char)*(strlen("serverclient")+1)+sizeof(int)*1)) == NULL){ printf("malloc per letture dal server fallita,terminazione client"); exit(1); } printf("messaggio da inoltrare = %s;\n",msg);//stampa di controllo con carattere indecifrabile STAMPE SU SHELL: messaggio da inoltrare = 6652 CONNECT silvio; messaggio da inoltrare = 6652 CONNECT silvio[carattereindecifrabile]; Ultima modifica di santaclause83 : 20-07-2007 alle 11:10. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
strncat(msg," CONNECT ",strlen(" CONNECT ")+1); o ancora più semplicemente: strcat(msg," CONNECT "); Idem per la strncat sotto.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
sizeof(int) ritorna sempre 4, mentre il pid può essere anche più di 4 caratteri
Devi convertire il pid ad intero in una stringa temporanea e misurarne la lunghezza. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
char * strncat ( char * destination, char * source, size_t num ); Appends the first num characters of source to destination, plus a terminating null-character. If the length of the C string in source is less than num, only the content up to the terminating null-character is copied. |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 20-07-2007 alle 13:19. |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Mar 2006
Messaggi: 131
|
la cosa assurda è che stamattina dopo aver scritto il post,l'ho collaudato senza toccarlo e non mi faceva più sto scherzo....
credendolo "risolto" sono stato a lavorare su altre cose del programma e ad un tratto ha iniziato a ridare lo stesso problema! Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Dovrei andare a cercare della documentazione (per essere sicuro al 100%) ma ho la netta sensazione che più di 32767 non si possa avere per un pid.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
EDIT: confermo che la Borland lo typedeffa così: typedef unsigned pid_t;
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve Ultima modifica di trallallero : 21-07-2007 alle 08:10. |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Poi scrivendo con sprintf l'intero nel buffer basta usare strlen per scoprirne la lunghezza effettiva da aggiungere al resto delle lunghezze. Ultima modifica di cionci : 21-07-2007 alle 08:23. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:16.




















