Differenze tra le versioni di "Memset ()"

Da Gambas-it.org - Wikipedia.
Riga 2: Riga 2:
 
  ''void * '''memset'''( void *buffer, int c, size_t count )''
 
  ''void * '''memset'''( void *buffer, int c, size_t count )''
 
copia il valore di "c" nell'area di memoria (''Puntatore'' oppure ''vettore'') per una quantità stabilita nell'argomento ''count''.  
 
copia il valore di "c" nell'area di memoria (''Puntatore'' oppure ''vettore'') per una quantità stabilita nell'argomento ''count''.  
<BR>V'è da precisare che il valore del secondo parametro viene passato come un intero (''int''), ma la funzione stessa riempie il blocco di memoria utilizzando la conversione di questo valore nel tipo "''unsigned char''" (ossia il tipo ''Byte'' di Gambas).
+
<BR>V'è da precisare che il valore del secondo parametro viene passato come un intero (''int'' ), ma la funzione stessa riempie il blocco di memoria utilizzando la conversione di questo valore nel tipo "''unsigned char'' " (ossia il tipo ''Byte'' di Gambas).
  
  
 
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>(buffer As [vettore/puntatore], c As Byte, count As Long) 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.
+
Il primo argomento, oltre a essere di tipo ''Puntatore'', potrà essere anche un Vettore.
  
  
 
+
Semplice esempio di uso in Gambas, nel quale si assegna il valore 100 agli elementi di un vettore di tipo "Byte[]":
Semplice esempio di uso in Gambas, nel quale si assegna il valore 100 agli elementi di un vettore di tipo ''Byte[ ]'':
 
 
  <FONT color=Gray>' ''void * memset(void *buffer, int c, size_t count)''
 
  <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>
 
  ' ''Copies the character c (an unsigned char) to the first count characters of the string pointed to, by the argument buffer.''</font>
Riga 21: Riga 20:
 
   Dim bb As New Byte[10]
 
   Dim bb As New Byte[10]
 
   Dim b As Byte
 
   Dim b As Byte
 +
 +
  <FONT color=#B22222>memset</font>(bb, 100, 10)
 +
 
 +
  For Each b In bb
 +
    Print b
 +
  Next
 
    
 
    
  <FONT color=#B22222>memset</font>(bb, 100, 10)
 
   
 
  For Each b In bb
 
    Print b
 
  Next
 
 
 
 
  '''End'''
 
  '''End'''
Nello stesso esempio la destinazione potrà essere anche un ''Puntatore'' ad un vettore:
+
Nello stesso esempio la destinazione potrà essere anche un ''Puntatore'', rappresentato dalla Proprietà ".Data" di un vettore:
 
  <FONT color=Gray>' ''void * memset(void *buffer, int c, size_t count)''
 
  <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>
 
  ' ''Copies the character c (an unsigned char) to the first count characters of the string pointed to, by the argument buffer.''</font>
Riga 39: Riga 38:
 
   Dim bb As New Byte[10]
 
   Dim bb As New Byte[10]
 
   Dim b As Byte
 
   Dim b As Byte
 +
 +
<FONT color=Gray>' ''In questo caso al primo argomento della funzione passiamo il ''Puntatore'' all'area di memoria del vettore, ove sono memorizzati i dati contenuti dagli elementi del vettore medesimo. L'indirizzo di memoria di detta area è restituita dalla Proprietà ".Data" del vettore:''</font>
 +
  memset(bb<FONT color=#B22222>.Data</font>, 100, 10)
 +
 
 +
  For Each b In bb
 +
    Print b
 +
  Next
 
    
 
    
<FONT color=Gray>' ''In questo caso al primo argomento della funzione passiamo il ''Puntatore'' all'area di memoria del vettore, ove sono memorizzati''
 
' ''i dati contenuti dagli elementi del vettore medesimo. L'indirizzo di memoria di detta area è restituita dalla proprietà ''.Data'' del vettore:''</font>
 
  memset(bb<FONT color=#B22222>.Data</font>, 100, 10)
 
   
 
  For Each b In bb
 
    Print b
 
  Next
 
 
 
 
  '''End'''
 
  '''End'''
  
 
+
Altro esempio nel quale si azzereranno tutti gli elementi di un vettore di tipo "Integer[]":
Altro esempio nel quale si azzereranno tutti gli elementi di un vettore di tipo ''Integer[ ]'':
 
 
  <FONT color=Gray>' ''void * memset(void *buffer, int c, size_t count)''
 
  <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>
 
  ' ''Copies the character c (an unsigned char) to the first count characters of the string pointed to, by the argument buffer.''</font>
Riga 60: Riga 57:
 
   Dim ii As Integer[] = [1, 2, 3, 4, 5]
 
   Dim ii As Integer[] = [1, 2, 3, 4, 5]
 
   Dim i As Integer
 
   Dim i As Integer
 
 
 
   
 
   
  <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>(ii, 0, ii.Count * SizeOf(gb.Integer))
    <FONT color=#B22222>memset</font>(ii, 0, ii.Count * SizeOf(gb.Integer))
+
 
+
  For Each i in ii
    For Each i in ii
+
    Print i
      Print i
+
  Next
    Next
 
 
   
 
   
 
  '''End'''
 
  '''End'''
 
  
 
In quest'altro esempio si modificheranno i primi 4 caratteri di una stringa:
 
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)''
 
  <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>
 
  ' ''Copies the character c (an unsigned char) to the first count characters of the string pointed to, by the argument buffer.''</font>
  Private Extern<FONT color=#B22222> memset</font>(buffer As String, c As Integer, count As Long) In "<FONT color=#B22222>libc:6</font>"
+
  Private Extern<FONT color=#B22222> memset</font>(buffer As Pointer, c As Integer, count As Long) In "<FONT color=#B22222>libc:6</font>"
 
   
 
   
 
   
 
   
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim s As String
+
   Dim p As Pointer
 +
 +
  p = Alloc("Testo qualsiasi")
 
   
 
   
  s = "Testo qualsiasi"
+
  <FONT color=#B22222>memset</font>(p, Asc("a"), 4)
 
   
 
   
  <FONT color=#B22222>memset</font>(s, Asc("a"), 4)
+
  Print String@(p)
 
   
 
   
  Print s
+
  Free(p)
 +
  p = 0
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 08:06, 4 set 2022

La funzione della libreria di C

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

copia il valore di "c" nell'area di memoria (Puntatore oppure vettore) per una quantità stabilita nell'argomento count.
V'è da precisare che il valore del secondo parametro viene passato come un intero (int ), ma la funzione stessa riempie il blocco di memoria utilizzando la conversione di questo valore nel tipo "unsigned char " (ossia il tipo Byte di Gambas).


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 argomento, oltre a essere di tipo Puntatore, potrà essere anche un Vettore.


Semplice esempio di uso in Gambas, nel quale si assegna il valore 100 agli elementi di un vettore di tipo "Byte[]":

' 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 Byte[], c As Integer, count As Long) In "libc:6"


Public Sub Main()

 Dim bb As New Byte[10]
 Dim b As Byte

 memset(bb, 100, 10)
  
 For Each b In bb
   Print b
 Next
 
End

Nello stesso esempio la destinazione potrà essere anche un Puntatore, rappresentato dalla Proprietà ".Data" di un vettore:

' 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 Pointer, c As Integer, count As Long) In "libc:6"


Public Sub Main()

 Dim bb As New Byte[10]
 Dim b As Byte

' In questo caso al primo argomento della funzione passiamo il Puntatore all'area di memoria del vettore, ove sono memorizzati i dati contenuti dagli elementi del vettore medesimo. L'indirizzo di memoria di detta area è restituita dalla Proprietà ".Data" del vettore:
 memset(bb.Data, 100, 10)
  
 For Each b In bb
   Print b
 Next
 
End

Altro esempio nel quale si azzereranno tutti gli elementi di un vettore 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 ii As Integer[] = [1, 2, 3, 4, 5]
 Dim i As Integer

' 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(ii, 0, ii.Count * SizeOf(gb.Integer))

 For Each i in ii
   Print i
 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 Pointer, c As Integer, count As Long) In "libc:6"


Public Sub Main()

 Dim p As Pointer

 p = Alloc("Testo qualsiasi")

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

 Print String@(p)

 Free(p)
 p = 0

End