Differenze tra le versioni di "Sprintf ()"

Da Gambas-it.org - Wikipedia.
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, "%lf", 123.456789)
+
   <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 il codice è simile al precedente, ma utilizzando una variabile vettoriale di tipo ''Byte[ ]'':
+
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, "%lf", 123.456789)
+
   <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>
   Print String@(bb.Data)
+
   s = String@(bb.Data)
 +
 
 +
  Print s
 
          
 
          
 
  '''End'''
 
  '''End'''

Versione delle 09: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



Riferimenti