PDA

Visualizza la versione completa : [C++] Sprintf modifica il valore delle variabili


napoleone89
26-04-2014, 15:46
Buongiorno a tutti,
sto implementando un codice in C++ in cui ad un certo punto utilizzo la funzione sprintf() e, per un motivo che mi completamente oscuro, una variabile che non dovrebbe c'entrare nulla con la funzione cambia il suo valore iniziale in un numero enorme; con questo codice:


[...]
x[0]=xL; // prima casella del vettore x ha il valore xL
for(i=1;i<IMAX;i++)
{
x[i]=x[i-1]+dx;
}

if(x[IMAX-1]>xR) //se valore x[IMAX] supera il limite destro x[IMAX]=xR
{x[IMAX-1]=xR;}

hL=8.0;
hR=0.8;
uL=0.0;
uR=0.0;

pf1=fopen("dati_iniz_U.txt","w");

for(i=0;i<IMAX;i++) //inizializzo Q con le condizioni iniziali
{
if(x[i]<=0)
{
Q[i].h=hL;
Q[i].u=uL;
}
else
{
Q[i].h=hR;
Q[i].u=uR;
}
fprintf(pf1,"%d %f\n", i, Q[i].h);
}
fclose(pf1);

char nome[6];

for(j=0;j<=NMAX;j++)
{

if(j==0)
{printf("%f\n", Q[0].h);}

sprintf(nome,"[...]/dati_u%d.txt",j);
pf1=fopen(nome,"w"); //apro file in scrittura

if (pf1==NULL)
{
printf("ERRORE creazione file");
system("PAUSE"); return 1;
}
[...]

stampando a schermo la variabile Q[0].h ha valore 8.0 come giusto che sia, se invece modifico il codice in questo modo,

for(j=0;j<=NMAX;j++)
{
sprintf(nome,"[...]/dati_u%d.txt",j);

if(j==0)
{printf("%f\n", Q[0].h);}

pf1=fopen(nome,"w"); //apro file in scrittura

mettendo

if(j==0)
{printf("%f\n", Q[0].h);}
dopo la sprintf
il valore della variabile stampato a schermo un numero a 20 zeri...
non capisco il motivo di questa cosa...
vi sarei grato se mi seste una mano
grazie

napoleone89
26-04-2014, 15:55
Lasciate perdere, ho risolto il problema....dimensione della stringa "nome" troppo ridotta....

MItaly
26-04-2014, 16:11
In generale se ti vuoi risparmiare un po' di questi problemi ti conviene usare gli ostringstream C++, che provvedono per i fatti loro ad allocare quanta memoria serve via via che aggiungi roba alla stringa.

Loading