Differenze tra le versioni di "Memcpy ()"
Da Gambas-it.org - Wikipedia.
Riga 2: | Riga 2: | ||
''void *'''memcpy'''(void *__restrict __dest, const void *__restrict __src, size_t __n)'' | ''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''. | 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à. | ||
Riga 25: | Riga 27: | ||
a = VarPtr(num) | a = VarPtr(num) | ||
− | b = Alloc(SizeOf(gb.Integer)) | + | b = Alloc(SizeOf(gb.Integer), 1) |
− | + | ||
− | + | <FONT color=#B22222>memcpy</font>(b, a, SizeOf(gb.Integer)) | |
− | |||
Print Int@(b) | Print Int@(b) | ||
Riga 47: | Riga 48: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | Dim | + | Dim dest As Pointer |
− | Dim | + | Dim src As String = "Questa è una prova con la funzione 'memcpy()'." |
− | + | ||
− | + | dest = Alloc(SizeOf(gb.Byte), Len(s)) | |
− | |||
− | dest = Alloc(Len(s)) | ||
− | + | <FONT color=#B22222>memcpy</font>(dest, src, Len(s)) | |
Print "Dopo memcpy, " & Quote("dest") & ":\n"; String@(dest) | Print "Dopo memcpy, " & Quote("dest") & ":\n"; String@(dest) | ||
− | + | ||
− | |||
Free(dest) | Free(dest) | ||
− | + | ||
'''End''' | '''End''' | ||
Versione delle 08:33, 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 rimo parametro (__dest) deve essere sempre allocata un'area di memoria di di adeguata quantità.
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
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 dest As Pointer Dim src As String = "Questa è una prova con la funzione 'memcpy()'." dest = Alloc(SizeOf(gb.Byte), Len(s)) memcpy(dest, src, Len(s)) Print "Dopo memcpy, " & Quote("dest") & ":\n"; String@(dest) Free(dest) End