Newsgroup: it.comp.lang.c
Titolo: sprintf

Ciao a tutti ho un problemino a capire cosa non va del codice che posto qui
sotto:
char stringa[10];
sprintf(stringa,"x\n",miavariabile); //scrivo su stringa la miavariabile
ulong
fprintf(stream,"x\n",stringa); //scrivo su di un file la mia stringa e tutto
funziona
ora perň vorrei scrivere solo qualche elemento per esempio stringa[5],
allora faccio cosi:
fprint(stream,"x\n",stringa[5]);
e questo non funziona ricevo strani valori che non corrispondono, in pratica
se stampo la stringa intera la ottengo se voglio elemento per elemento no.
perchč?
grazie a tutti!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 perchč?
e come facciamo a risponderti se scrivi x al posto
di quello che immagino tu abbia messo (tipo %s %c %d %f etc.etc.etc...) ?
Se il formato e' "x\n" ti stampa una bella x e poi va a capo.
cerca di riportare *esattamente* le istruzioni che
ti danno un comportamento che non ti torna, visto.
(Per esempio, la "fprint" non esiste.)
g.


Si volevo scrivere fprintf, per il formato ne ho provati vari ma nessuno mi
da lo stesso valore che ottengo se stampo la stringa tutta insieme, mi
spiego meglio. Nel modo seguente ottengo dei certi caratteri stampati su un
file e sono giusti:
char stringa[10];
sprintf(stringa,"x\n",miavariabile);
fprintf(stream,"x\n",stringa);
Se voglio stampare sul file il quinto carattere della stringa "stringa" come
posso fare? Ho scritto cosi:
fprintf(stream,"x\n",stringa[5]);
ho provato sia con %x che con %s e %c ma ottengo o zero o segmentation
error..


 error..
Non esiste provare, esiste riuscire o fallire.
Non puoi mettere delle cose a caso, perche' potrebbero andare
bene "per sbaglio" e farti crashare il programma la 100 volta che lo
esegui.
per le stringhe devi usare %s
per i singoli caratteri devi usare %c
in ogni caso tieni presente che il quinto carattere di stringa
non e' stringa[5] ma stringa[4] perche' in C gli indici partono da 0.
quindi per il quinto carattere dovresti scrivere
sprintf(stringa,"%......",miavariabile);
fprintf(stream,"%c\n",stringa[4]);
in ogni caso il problema potrebbe anche dipendere da
cose che non hai specificato, per esempio:
stringa[10] e' un vettore di 10 caratteri.
considerando che nella "stringa" ci metti un "\n" cioe'
un "a capo" (che a seconda del tuo s.o. occupa 1 o 2 caratteri)
e un terminatore di stringa (0)
quindi non puoi usare piu' di 7 o 8 caratteri.
Poi bisognerebbe vedere se questo stream l'hai aperto
correttamente tipo:
stream = fopen("ciccio.txt","w");
etc.etc.
Cerca di riportare *esattamente* il frammento di codice
(senza le x) che ti da errore.
ciao,
g.


Ecco ti posto le righe un po incriminate, per quanto riguarda gli stream
open è tutto a posto:
char hex[9]
sprintf(hex,"%x\n",variabile); //scrivo la variabile ulong esadecimale nella
stringa hex
fprintf(stream,"%x\n",hex); //Ok fino a qui ottengo su file la riga che
voglio, ora vorrei scrivere hex carattere per carattere
fprintf(stream,"c\n",hex[0]);
fprintf(stream,"c\n",hex[1]);
fprintf(stream,"c\n",hex[2]);
fprintf(stream,"c\n",hex[3]);
fprintf(stream,"c\n",hex[4]);
fprintf(stream,"c\n",hex[5]);
// eccetera..
Cosi facendo ottengo sempre la stessa sequenza di caratteri e cioè 6 0 0 0 0
0 0 0 !!Non capisco..


   
Vedi sopra ;-)


 0 0 0 !!Non capisco..
Mi rispondo da solo, ho risolto cosi,magari può essere utile a qualcuno,e
anche a me se hai commenti dimmi..
 sprintf(hex,"%c\n",variabile);
 sprintf(hex,"%x\n",hex);
 fprintf(stream,"%x\n",hex);
 fprintf(stream,"c\n",hex[0]);
 fprintf(stream,"c\n",hex[1]);
 fprintf(stream,"c\n",hex[2]);
 fprintf(stream,"c\n",hex[3]);
 fprintf(stream,"c\n",hex[4]);
 fprintf(stream,"c\n",hex[5]);



Devi indicare alla funzione come intendi che tratta i parametri.
Ad esempio,
char* stringa = "questa e' una stringa";
e se vuoi stamparla
printf("\nQuesto flag indica che voglio stampare una stringa intera - %s", 
stringa );
E se vuoi stampare un carattere solo, puoi fare cosi'
printf("\nQuesto flag indica che voglio stampare una lettera sola - %c", 
stringa[5]);
Un altro esempio
int integer = 65;    //65 e' anche il codice ASCII della lettera 'A'
printf("\nQuesto flag indica che voglio stampare un integer (signed) - 
%d\nVoglio anche stampare la lettera del codice ascii di quel integer - %c", 
integer, integer);
Ci sono tantissimi altri flag che dovresti imparare e sapere se hai 
intenzione di essere un bravo programmatore C. Trovati un bel libro e 
leggilo bene. Te ne consiglierei uno, ma so solamente libri in inglese.
Spero che ti abbia aiutato, e che mi abbia potuto capire.... Non parlo bene 
l'Italiano, specialmente quando sono le 3 di notte =)