Sprintf (): differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 21: | Riga 21: | ||
Dim p As Pointer | Dim p As Pointer | ||
Dim s As String | |||
<FONT Color=gray>' ''Allochiamo un'area di memoria adeguata a contenere la stringa finale:''</font> | <FONT Color=gray>' ''Allochiamo un'area di memoria adeguata a contenere la stringa finale:''</font> | ||
p = Alloc(SizeOf(gb.Float), 4) | p = Alloc(SizeOf(gb.Float), 4) | ||
<FONT color=#B22222>sprintf</font>(p, "% | <FONT color=#B22222>sprintf</font>(p, "%f", 123.456789) | ||
Print String@(p) | s = String@(p) | ||
Print s | |||
<FONT Color=gray>' ''Liberiamo la memoria precedentemente allocata:''</font> | |||
Free(p) | |||
'''End''' | |||
Mostriamo un altro semplice esempio, nel quale viene convertito in stringa un valore di tipo ''Intero''. | |||
Library "libc:6" | |||
<FONT Color=gray>' ''int sprintf (char *__restrict __s, const char *__restrict __format, ...)'' | |||
' ''Write formatted output to S.''</font> | |||
Private Extern sprintf(__s As Pointer, __format As String, i As Integer) As Integer | |||
'''Public''' Sub Main() | |||
Dim p As Pointer | |||
Dim s As String | |||
<FONT Color=gray>' ''Allochiamo un'area di memoria adeguata a contenere la stringa finale:''</font> | |||
p = Alloc(SizeOf(gb.Integer), 4) | |||
<FONT color=#B22222>sprintf</font>(p, "%d", 123456789) | |||
s = String@(p) | |||
Print s | |||
<FONT Color=gray>' ''Liberiamo la memoria precedentemente allocata:''</font> | <FONT Color=gray>' ''Liberiamo la memoria precedentemente allocata:''</font> | ||
| Riga 35: | Riga 66: | ||
In quest'altro più breve esempio | In quest'altro più breve esempio viene utilizzata una variabile vettoriale di tipo ''Byte[ ]'': | ||
Library "libc:6" | Library "libc:6" | ||
| Riga 46: | Riga 77: | ||
Dim bb As New Byte[32] | Dim bb As New Byte[32] | ||
Dim s As String | |||
<FONT color=#B22222>sprintf</font>(bb, "% | <FONT color=#B22222>sprintf</font>(bb, "%f", 12345.6789) | ||
<FONT Color=gray>' ''Optiamo per la dereferenziazione del Puntatore ai dati dell'array,'' | <FONT Color=gray>' ''Optiamo per la dereferenziazione del Puntatore ai dati dell'array,'' | ||
' ''poiché in tal modo non saranno stampati anche gli eventuali byte &h00:''</font> | ' ''poiché in tal modo non saranno stampati anche gli eventuali byte aventi valore &h00:''</font> | ||
s = String@(bb.Data) | |||
Print s | |||
'''End''' | '''End''' | ||
Versione delle 10:06, 9 set 2016
La funzione
int sprintf (char *__restrict __s, const char *__restrict __format, ...)
scrive nel Puntatore "__s" gli argomenti passati formattati.
Questa funzione viene solitamente utilizzata in C per convertire agevolmente un valore di tipo numerico in una Stringa.
Volendo utilizzare tale funzione in Gambas, bisognerà dichiararla con Extern, nonché bisognerà dichiarare la libreria di C: libc.so.6, nella quale essa è contenuta:
Private Extern sprintf(__s As Pointer, __format As String, valore As ...) As Integer
Mostriamo un semplice esempio, nel quale viene convertito in stringa un valore di tipo Float.
Library "libc:6" ' int sprintf (char *__restrict __s, const char *__restrict __format, ...) ' Write formatted output to S. Private Extern sprintf(__s As Pointer, __format As String, f As Float) As Integer Public Sub Main() Dim p As Pointer Dim s As String ' Allochiamo un'area di memoria adeguata a contenere la stringa finale: p = Alloc(SizeOf(gb.Float), 4) sprintf(p, "%f", 123.456789) s = String@(p) Print s ' Liberiamo la memoria precedentemente allocata: Free(p) End
Mostriamo un altro semplice esempio, nel quale viene convertito in stringa un valore di tipo Intero.
Library "libc:6" ' int sprintf (char *__restrict __s, const char *__restrict __format, ...) ' Write formatted output to S. Private Extern sprintf(__s As Pointer, __format As String, i As Integer) As Integer Public Sub Main() Dim p As Pointer Dim s As String ' Allochiamo un'area di memoria adeguata a contenere la stringa finale: p = Alloc(SizeOf(gb.Integer), 4) sprintf(p, "%d", 123456789) s = String@(p) Print s ' Liberiamo la memoria precedentemente allocata: Free(p) End
In quest'altro più breve esempio viene utilizzata una variabile vettoriale di tipo Byte[ ]:
Library "libc:6"
' int sprintf (char *__restrict __s, const char *__restrict __format, ...)
' Write formatted output to S.
Private Extern sprintf(__s As Byte[], __format As String, f As Float) As Integer
Public Sub Main()
Dim bb As New Byte[32]
Dim s As String
sprintf(bb, "%f", 12345.6789)
' Optiamo per la dereferenziazione del Puntatore ai dati dell'array,
' poiché in tal modo non saranno stampati anche gli eventuali byte aventi valore &h00:
s = String@(bb.Data)
Print s
End