|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
[C] Problema stupido con sprintf
Ciao a tutti,
ho un problema molto stupido che riguarda l'utilizzo dei puntatori a stringa. Con l'uso di sprintf voglio inserire un integer ad un puntatore char *t vuoto. Al termine di questa operazione so che dovrei inserire il carattere '\0' ma non so come fare... Codice:
char *insertpid(){ printf("risultato getpid %d",getpid()); sprintf(temp, "%d", getpid()); *temp = '\0'; printf("dentro insert pid: %s", temp); return temp; } Grazie a tutti
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
Ok, ho trovato una soluzione, non so se è esattamente corretta ma funziona:
Codice:
char *insertpid(){ char *temp; sprintf(temp, "%d", getpid()); temp[strlen(temp)] = '\0'; return temp; }
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
non serve che tu inserisca manualmente il terminatore, la sprintf già lo fa. questa riga di codice è inutile:
Codice:
temp[strlen(temp)] = '\0'; |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
Be allora non riesco a spiegarmi perchè ora funzioni e prima no. Prima se provavo a stamparla a video mi dava dei caratteri speciali, ora stampa correttamente...
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ma che c'entra, il programma di prima era completamente diverso: metteva il terminatore come primo carattere della stringa, quindi la stringa risultava sempre vuota. comunque vorrei farti notare che è errata anche la seconda versione: non hai allocato il buffer.
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Aug 2005
Città: Wien
Messaggi: 435
|
Hai ragione, la funzione era completamente errata. Quella (spero) corretta è:
Codice:
char *insertpid(){ char *temp = malloc(10); sprintf(temp, "%d", (int) getpid()); return temp; } Comunque continuo a non capire come mai la versione errata dava lo stesso un risultato corretto... Bah...
__________________
"Sono 126 miglia per Chicago. Abbiamo il serbatoio pieno, mezzo pacchetto di sigarette, è buio, e portiamo tutt'e due gli occhiali da sole" |
![]() |
![]() |
![]() |
#7 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
perché andavi a scrivere chissà dove in memoria; la variabile temp era un dangling pointer.
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:17.