Differenze tra le versioni di "Strncpy ()"

Da Gambas-it.org - Wikipedia.
(Creata pagina con " Library "libc:6" <FONT Color=gray>' ''char *strncpy (char *__restrict __dest, const char *__restrict __src, size_t __n)'' ' ''Copy no more than N characters of SRC to...")
 
 
(7 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''"
 +
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 <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:
 +
Private QUANTUM As Integer = 4
 +
 +
 
  Library "libc:6"
 
  Library "libc:6"
 
   
 
   
Riga 11: 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)
 
    
 
    
 +
<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>
 
   Free(p2)
 
   Free(p2)
   Free(p1)
+
   p2 = 0
 
+
     
 
  '''End'''
 
  '''End'''
  
Riga 29: Riga 48:
  
  
<FONT Color=red size=4><B>Pagina in costruzione !</b></font>
+
=Riferimenti=
 +
* http://linux.die.net/man/3/strncpy
 +
* https://www.gnu.org/software/libc/manual/html_node/Truncating-Strings.html
 +
* http://digilander.libero.it/uzappi/C/librerie/funzioni/strcpy.html
 +
* http://stackoverflow.com/questions/1453876/why-does-strncpy-not-null-terminate
 +
* http://www.techonthenet.com/c_language/standard_library_functions/string_h/strncpy.php

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