Differenze tra le versioni di "Memset ()"

Da Gambas-it.org - Wikipedia.
Riga 5: Riga 5:
  
 
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché bisognerà dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta:
 
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché bisognerà dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta:
  Private <FONT color=#B22222>Extern memset</font>(dest As integer[], c As Integer, count As Integer) In "<FONT color=#B22222>libc:6</font>"
+
  Private <FONT color=#B22222>Extern memset</font>(buffer As [Pointer], c As Byte, count As Long) In "<FONT color=#B22222>libc:6</font>"
 +
Il primo valore potrà essere a seconda delle circostanze semplicemente un Puntatore, oppure un Vettore, o una Stringa.
  
  
  
Semplice esempio uso in Gambas:
+
Semplice esempio di uso in Gambas, nel quale si azzereranno i valori di un vbettore di tipo ''Integer[ ]'':
  <FONT color=Gray>' ''void * memset( void *buffer, int c, size_t count )''</font>
+
  <FONT color=Gray>' ''void * memset(void *buffer, int c, size_t count)''
  '''Private''' <FONT color=#B22222>Extern memset</font>(dest As integer[], c As Integer, count As Integer) In "<FONT color=#B22222>libc:6</font>"
+
' ''Copies the character c (an unsigned char) to the first count characters of the string pointed to, by the argument buffer.''</font>
 +
  Private <FONT color=#B22222>Extern memset</font>(dest As integer[], c As Integer, count As Long) In "<FONT color=#B22222>libc:6</font>"
 
   
 
   
  '''Public''' Sub Form_Open()
+
  '''Public''' Sub Main()
 
   
 
   
 
   Dim cc As Integer[] = [1, 2, 3, 4, 5]
 
   Dim cc As Integer[] = [1, 2, 3, 4, 5]
Riga 21: Riga 23:
 
  <FONT color=gray>' ''Se il vettore è di tipo "Integer", allora il valore del 3° parametro della funzione''
 
  <FONT color=gray>' ''Se il vettore è di tipo "Integer", allora il valore del 3° parametro della funzione''
 
  ' ''va moltiplicato per 4, poiché il valore di tipo "Intero" occupa nella memoria 4 byte:''</font>
 
  ' ''va moltiplicato per 4, poiché il valore di tipo "Intero" occupa nella memoria 4 byte:''</font>
      <FONT color=#B22222>memset</font>(cc, 0, cc.Count * SizeOf(gb.Integer))
+
    <FONT color=#B22222>memset</font>(cc, 0, cc.Count * SizeOf(gb.Integer))
 
    
 
    
 
     For j = 0 To cc.Max
 
     For j = 0 To cc.Max
 
       Print cc[j]
 
       Print cc[j]
 
     Next
 
     Next
 +
 +
'''End'''
 +
 +
 +
In quest'altro esempio si modificheranno i primi 4 caratteri di una stringa:
 +
<FONT color=Gray>' ''void * memset(void *buffer, int c, size_t count)''
 +
' ''Copies the character c (an unsigned char) to the first count characters of the string pointed to, by the argument buffer.''</font>
 +
Private <FONT color=#B22222>Extern memset</font>(buffer As String, c As Byte, count As Long) In "<FONT color=#B22222>libc:6</font>"
 +
 +
 +
'''Public''' Sub Main()
 +
 +
  Dim s As String
 +
 +
  s = "Testo qualsiasi"
 +
 +
  <FONT color=#B22222>memset</font>(s, Asc("a"), 4)
 +
 +
  Print s
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 12:15, 6 set 2015

La funzione della libreria di C

void * memset( void *buffer, int c, size_t count )

imposta tutti i valori di un vettore (array) a zero.


Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché bisognerà dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta:

Private Extern memset(buffer As [Pointer], c As Byte, count As Long) In "libc:6"

Il primo valore potrà essere a seconda delle circostanze semplicemente un Puntatore, oppure un Vettore, o una Stringa.


Semplice esempio di uso in Gambas, nel quale si azzereranno i valori di un vbettore di tipo Integer[ ]:

' void * memset(void *buffer, int c, size_t count)
' Copies the character c (an unsigned char) to the first count characters of the string pointed to, by the argument buffer.
Private Extern memset(dest As integer[], c As Integer, count As Long) In "libc:6"

Public Sub Main()

 Dim cc As Integer[] = [1, 2, 3, 4, 5]
 Dim j As Byte
 

' Se il vettore è di tipo "Integer", allora il valore del 3° parametro della funzione
' va moltiplicato per 4, poiché il valore di tipo "Intero" occupa nella memoria 4 byte:
   memset(cc, 0, cc.Count * SizeOf(gb.Integer))
  
   For j = 0 To cc.Max
     Print cc[j]
   Next

End


In quest'altro esempio si modificheranno i primi 4 caratteri di una stringa:

' void * memset(void *buffer, int c, size_t count)
' Copies the character c (an unsigned char) to the first count characters of the string pointed to, by the argument buffer.
Private Extern memset(buffer As String, c As Byte, count As Long) In "libc:6"


Public Sub Main()

 Dim s As String

  s = "Testo qualsiasi"

  memset(s, Asc("a"), 4)

  Print s

End