|
|||||||
|
|
|
![]() |
|
|
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: 06:03.




















