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:

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,
codice:
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
codice:
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