Differenze tra le versioni di "Strncpy ()"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
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 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
 
  Private QUANTUM As Integer = 4
Riga 23: Riga 21:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
  Dim s As String
+
  Dim s As String
  Dim p1, p2 As Pointer
+
  Dim p1, p2 As Pointer
 
    
 
    
 
   s = "abcde fghil"
 
   s = "abcde fghil"
Riga 35: Riga 33:
 
  <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, QUANTUM)
 
   <FONT Color=#B22222>strncpy</font>(p2, p1, QUANTUM)
 
+
 
  <FONT Color=gray>' ''Per leggere la stringa, presente nell'area di memoria puntata dal Puntatore del 1° parametro, dereferenziamo tale Puntatore:''</font>
 
  <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)
 
   Print String@(p2)
 
+
  <FONT Color=gray>' ''Liberiamo la porzione di memoria precedentemente allocata, e ci assicuriamo anche che il Puntatore non punti ad alcuna cella di memoria:''</font>
+
  <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)
 
   p2 = 0
 
   p2 = 0
     
+
  '''End'''
+
  End
 
 
  
  

Versione attuale delle 16: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