Differenze tra le versioni di "Strncpy ()"

Da Gambas-it.org - Wikipedia.
 
(6 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.
Riga 13: Riga 13:
  
 
Mostriamo un semplice esempio:
 
Mostriamo un semplice esempio:
 +
Private QUANTUM As Integer = 4
 +
 +
 
  Library "libc:6"
 
  Library "libc:6"
 
   
 
   
Riga 22: Riga 25:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    
 +
  Dim s As String
 
   Dim p1, p2 As Pointer
 
   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>' ''Liberiamo la porzione di memoria precedentemente allocata, e ci assicuriamo anche che il Puntatore non punti ad alcuna cella di memoria:''</font>
 
   Free(p2)
 
   Free(p2)
   Free(p1)
+
   p2 = 0
 
+
     
 
  '''End'''
 
  '''End'''
  

Versione attuale delle 10:00, 9 feb 2017

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)
  
' Liberiamo la porzione di memoria precedentemente allocata, e ci assicuriamo anche che il Puntatore non punti ad alcuna cella di memoria:
  Free(p2)
  p2 = 0
     
End



Riferimenti