Differenze tra le versioni di "Memcpy ()"

Da Gambas-it.org - Wikipedia.
Riga 3: Riga 3:
 
copia ''n'' caratteri da un'area di memoria ''str2'' ad un'altra area di memoria ''str1'', entrambe puntate da due variabili di tipo ''Puntatore''.
 
copia ''n'' caratteri da un'area di memoria ''str2'' ad un'altra area di memoria ''str1'', entrambe puntate da due variabili di tipo ''Puntatore''.
  
Va ricordato che per la variabile di tipo ''Puntatore'' del rimo parametro (''__dest'') deve essere <SPAN Style="text-decoration:underline">sempre</span> ''allocata'' un'area di memoria di di adeguata quantità.
+
Va ricordato che per la variabile di tipo ''Puntatore'' del primo parametro (''__dest'') deve essere <SPAN Style="text-decoration:underline">sempre</span> ''allocata'' un'area di memoria di quantità adeguata.
  
  
Riga 39: Riga 39:
  
 
===Semplice esempio di uso in Gambas con un valore di tipo ''Stringa''===
 
===Semplice esempio di uso in Gambas con un valore di tipo ''Stringa''===
 +
In questo caso il ''secondo'' parametro della funzione esterna ''memcpy( )'' sarà di tipo ''Stringa''.
 
  Library "libc:6"
 
  Library "libc:6"
 
   
 
   
 
  <FONT color=Gray>' ''void *'''memcpy'''(void *__restrict __dest, const void *__restrict __src, size_t __n)''
 
  <FONT color=Gray>' ''void *'''memcpy'''(void *__restrict __dest, const void *__restrict __src, size_t __n)''
 
  ' ''Copy N bytes of SRC to DEST.''</font>
 
  ' ''Copy N bytes of SRC to DEST.''</font>
  Private Extern <FONT color=#B22222>memcpy</font>(__dest As Pointer, __src As Pointer, __n As Long)
+
  Private Extern <FONT color=#B22222>memcpy</font>(__dest As Pointer, __src As <FONT color=#B22222>String</font>, __n As Long)
 
   
 
   
 
   
 
   
Riga 50: Riga 51:
 
   Dim dest As Pointer
 
   Dim dest As Pointer
 
   Dim src As String = "Questa è una prova con la funzione 'memcpy()'."
 
   Dim src As String = "Questa è una prova con la funzione 'memcpy()'."
 +
  Dim i As Integer
 +
 
 +
  i = Len(src)
 
    
 
    
   dest = Alloc(SizeOf(gb.Byte), Len(s))
+
   dest = Alloc(SizeOf(gb.Byte), i)
 
      
 
      
   <FONT color=#B22222>memcpy</font>(dest, src, Len(s))
+
   <FONT color=#B22222>memcpy</font>(dest, src, i)
 
      
 
      
 
   Print "Dopo memcpy, " & Quote("dest") & ":\n"; String@(dest)
 
   Print "Dopo memcpy, " & Quote("dest") & ":\n"; String@(dest)

Versione delle 09:38, 8 set 2016

La funzione della libreria di C

void *memcpy(void *__restrict __dest, const void *__restrict __src, size_t __n)

copia n caratteri da un'area di memoria str2 ad un'altra area di memoria str1, entrambe puntate da due variabili di tipo Puntatore.

Va ricordato che per la variabile di tipo Puntatore del primo parametro (__dest) deve essere sempre allocata un'area di memoria di quantità adeguata.


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


Semplice esempio di uso in Gambas con un valore numerico di tipo Intero

Library "libc:6"

' void *memcpy(void *__restrict __dest, const void *__restrict __src, size_t __n)
' Copy N bytes of SRC to DEST.
Private Extern memcpy(__dest As Pointer, __src As Pointer, __n As Long)

Public Sub Main()

 Dim a, b As Pointer
 Dim num As Integer
 
 
  num = 999

  a = VarPtr(num)
  b = Alloc(SizeOf(gb.Integer), 1)
  
  memcpy(b, a, SizeOf(gb.Integer))
  
  Print Int@(b)

  Free(b)

End


Semplice esempio di uso in Gambas con un valore di tipo Stringa

In questo caso il secondo parametro della funzione esterna memcpy( ) sarà di tipo Stringa.

Library "libc:6"

' void *memcpy(void *__restrict __dest, const void *__restrict __src, size_t __n)
' Copy N bytes of SRC to DEST.
Private Extern memcpy(__dest As Pointer, __src As String, __n As Long)


Public Sub Main()

 Dim dest As Pointer
 Dim src As String = "Questa è una prova con la funzione 'memcpy()'."
 Dim i As Integer
  
  i = Len(src)
  
  dest = Alloc(SizeOf(gb.Byte), i)
   
  memcpy(dest, src, i)
   
  Print "Dopo memcpy, " & Quote("dest") & ":\n"; String@(dest)
  
  Free(dest)
  
End



Riferimenti