Differenze tra le versioni di "Strncpy ()"

Da Gambas-it.org - Wikipedia.
 
(8 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
La funzione '''''strncpy( )''''', dichiarata nel file header di sistema "''/usr/include/string.h''"
+
La funzione '''strncpy()''', dichiarata nel file header di sistema "''/usr/include/string.h''"
 
  char *strncpy (char *__restrict __dest, const char *__restrict __src, size_t __n)
 
  char *strncpy (char *__restrict __dest, const char *__restrict __src, size_t __n)
copia un numero ''__n'' di byte (cominciando comunque dal primo byte) dell'area di memoria puntata dal puntatore ''__src''' nell'area di memoria puntata dal Puntatore ''__dest''.
+
copia un numero ''__n'' di byte (cominciando comunque dal primo byte) dell'area di memoria puntata dal puntatore ''__src'' nell'area di memoria puntata dal Puntatore ''__dest''.
  
Se la funzione ''strncpy( )' incontra in ''__src'' un carattere nullo (0x00, ossia in Gambas &h00), la funzione aggiungerà a ''_dest'' un numero di caratteri nulli fino fino a che ''n'' caratteri non sono stati scritti.
+
Se la funzione "strncpy()" incontra in ''__src'' un carattere nullo (0x00, ossia in Gambas: &h00), la funzione aggiungerà a ''_dest'' un numero di caratteri nulli fino a che ''n'' caratteri non sono stati scritti.
  
La funzione ''strncpy( )'' può risultare non molto utile per la copia di una stringa in un'altra stringa, se l'area di memoria puntata dal Puntatore ''__src'' è più breve di n caratteri, la stringa di destinazione verrà troncata.
+
La funzione "strncpy()" può risultare non molto utile per la copia di una stringa in un'altra stringa, se l'area di memoria puntata dal Puntatore ''__src'' è più breve di n caratteri, la stringa di destinazione verrà troncata.
  
  
 
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 strncpy</font>(__dest As Pointer, __src As Pointer, __n As Long) In "<FONT color=#B22222>libc:6</font>"
 
  Private <FONT color=#B22222>Extern strncpy</font>(__dest As Pointer, __src As Pointer, __n As Long) In "<FONT color=#B22222>libc:6</font>"
 
 
 
Mostriamo un semplice esempio:
 
Mostriamo un semplice esempio:
 +
Private QUANTUM As Integer = 4
 +
 +
 
  Library "libc:6"
 
  Library "libc:6"
 
   
 
   
Riga 20: Riga 21:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
  Dim p1, p2 As Pointer
+
  Dim s As String
 +
  Dim p1, p2 As Pointer
 
    
 
    
   p1 = Alloc("abcdefghil")
+
  s = "abcde fghil"
   p2 = Alloc(4)
+
 
 +
   p1 = VarPtr(s)
 +
   p2 = Alloc(QUANTUM)
 
    
 
    
  <FONT Color=gray>' ''Copia nell'area di memoria, puntata dal Puntatore del 1° argomento, i soli primi 4 byte dell'area di memoria puntata dal Puntatore del 2° argomento.''</font>
+
  <FONT Color=gray>' ''Copia nell'area di memoria, puntata dal Puntatore del 1° argomento, i soli primi 4 byte dell'area di memoria puntata dal Puntatore del 2° argomento:''</font>
   <FONT Color=#B22222>strncpy</font>(p2, p1, 4)
+
   <FONT Color=#B22222>strncpy</font>(p2, p1, QUANTUM)
 
+
   Print Left(String@(p2), 4)
+
<FONT Color=gray>' ''Per leggere la stringa, presente nell'area di memoria puntata dal Puntatore del 1° parametro, dereferenziamo tale Puntatore:''</font>
   
+
   Print String@(p2)
 +
 +
<FONT Color=gray>' ''Libera la porzione di memoria precedentemente allocata, e si assicura che il Puntatore non punti ad alcun indirizzo rilevante di memoria:''</font>
 
   Free(p2)
 
   Free(p2)
   Free(p1)
+
   p2 = 0
 
+
  '''End'''
+
  End
 
 
  
  

Versione attuale delle 15:02, 16 giu 2024

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

char *strncpy (char *__restrict __dest, const char *__restrict __src, size_t __n)

copia un numero __n di byte (cominciando comunque dal primo byte) dell'area di memoria puntata dal puntatore __src nell'area di memoria puntata dal Puntatore __dest.

Se la funzione "strncpy()" incontra in __src un carattere nullo (0x00, ossia in Gambas: &h00), la funzione aggiungerà a _dest un numero di caratteri nulli fino a che n caratteri non sono stati scritti.

La funzione "strncpy()" può risultare non molto utile per la copia di una stringa in un'altra stringa, se l'area di memoria puntata dal Puntatore __src è più breve di n caratteri, la stringa di destinazione verrà troncata.


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

Mostriamo un semplice esempio:

Private QUANTUM As Integer = 4


Library "libc:6"

' char *strncpy (char *__restrict __dest, const char *__restrict __src, size_t __n)
' Copy no more than N characters of SRC to DEST.
Private Extern strncpy(__dest As Pointer, __src As Pointer, __n As Long)


Public Sub Main()
 
  Dim s As String
  Dim p1, p2 As Pointer
 
  s = "abcde fghil"
  
  p1 = VarPtr(s)
  p2 = Alloc(QUANTUM)
 
' Copia nell'area di memoria, puntata dal Puntatore del 1° argomento, i soli primi 4 byte dell'area di memoria puntata dal Puntatore del 2° argomento:
  strncpy(p2, p1, QUANTUM)

' Per leggere la stringa, presente nell'area di memoria puntata dal Puntatore del 1° parametro, dereferenziamo tale Puntatore:
  Print String@(p2)

' Libera la porzione di memoria precedentemente allocata, e si assicura che il Puntatore non punti ad alcun indirizzo rilevante di memoria:
  Free(p2)
  p2 = 0

End


Riferimenti