Differenze tra le versioni di "Memmove ()"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "La funzione '''''memmove( )''''', dichiarata nel file header di sistema "''/usr/include/string.h''" void *memmove (void *__dest, const void *__src, size_t __n) copia N byte d...")
 
Riga 4: Riga 4:
  
 
In particolare, la memoria sorgente, puntata dal Puntatore ''__src'', di dimensione specificata viene copiata nel buffer e poi si trasferisce all'area di memoria di destinazione, puntata dal Puntatore ''__dest''. Quindi, se v'è sovrapposizione di memoria, non ci sono effetti collaterali.
 
In particolare, la memoria sorgente, puntata dal Puntatore ''__src'', di dimensione specificata viene copiata nel buffer e poi si trasferisce all'area di memoria di destinazione, puntata dal Puntatore ''__dest''. Quindi, se v'è sovrapposizione di memoria, non ci sono effetti collaterali.
 +
 +
 +
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 memmove</font>(__dest As Pointer, __src As Pointer, __n As Long) In "<FONT color=#B22222>libc:6</font>"
 +
 +
 +
Mostriamo un semplice esempio:
 +
Library "libc:6"
 +
 +
<FONT Color=gray>' ''void *memmove (void *__dest, const void *__src, size_t __n)''
 +
' ''Copy N bytes of SRC to DEST, guaranteeing correct behavior for overlapping strings.''</font>
 +
Private Extern <FONT color=#B22222>memmove</font>(__dest As Pointer, __src As Pointer, __n As Long)
 +
 +
 +
'''Public''' Sub Main()
 +
 
 +
  Dim s As String
 +
  Dim p1 As Pointer
 +
 
 +
  s = "abcdef"
 +
 
 +
  p1 = VarPtr(s)
 +
   
 +
<FONT Color=gray>' ''Copia nel Puntatore del 1° argomento, i primi 4 byte dell'area di memoria puntata dal Puntatore del 2° argomento,''
 +
' ''sovrapponendoli a partire dal dato di "indice" 2 dell'area di memoria puntata dal predetto Puntatore del 1° argomento.''</font>
 +
  <FONT color=#B22222>memmove</font>(p1 + 2, p1, 4)
 +
   
 +
  Print String@(p1)
 +
 
 +
'''End'''
  
  
Riga 14: Riga 44:
 
* http://stackoverflow.com/questions/9041787/how-to-use-and-when-is-good-use-memmove-in-c
 
* http://stackoverflow.com/questions/9041787/how-to-use-and-when-is-good-use-memmove-in-c
 
* http://www.tutorialspoint.com/c_standard_library/c_function_memmove.htm
 
* http://www.tutorialspoint.com/c_standard_library/c_function_memmove.htm
 
 
 
<FONT Color=Red size=4><B>Pagina in costruzione !</b></font>
 

Versione delle 19:26, 20 lug 2016

La funzione memmove( ), dichiarata nel file header di sistema "/usr/include/string.h"

void *memmove (void *__dest, const void *__src, size_t __n)

copia N byte di SRC a DEST, garantendo un comportamento corretto in caso di sovrapposizione di stringhe.

In particolare, la memoria sorgente, puntata dal Puntatore __src, di dimensione specificata viene copiata nel buffer e poi si trasferisce all'area di memoria di destinazione, puntata dal Puntatore __dest. Quindi, se v'è sovrapposizione di memoria, non ci sono effetti collaterali.


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 memmove(__dest As Pointer, __src As Pointer, __n As Long) In "libc:6"


Mostriamo un semplice esempio:

Library "libc:6"

' void *memmove (void *__dest, const void *__src, size_t __n)
' Copy N bytes of SRC to DEST, guaranteeing correct behavior for overlapping strings.
Private Extern memmove(__dest As Pointer, __src As Pointer, __n As Long)


Public Sub Main()
 
 Dim s As String
 Dim p1 As Pointer
 
  s = "abcdef"
 
  p1 = VarPtr(s)
   
' Copia nel Puntatore del 1° argomento, i primi 4 byte dell'area di memoria puntata dal Puntatore del 2° argomento,
' sovrapponendoli a partire dal dato di "indice" 2 dell'area di memoria puntata dal predetto Puntatore del 1° argomento.
  memmove(p1 + 2, p1, 4)
   
  Print String@(p1)
  
End



Riferimenti