Differenze tra le versioni di "Strncpy ()"

Da Gambas-it.org - Wikipedia.
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 fino a che ''n'' caratteri non sono stati scritti.

Versione delle 02:19, 22 lug 2016

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 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:

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 p1, p2 As Pointer
 
  p1 = Alloc("abcdefghil")
  p2 = Alloc(4)
 
' 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, 4)
  
' ATTENZIONE ! La funzione "strncpy()", copiando, non pone alla fine dei byte copiati il carattere "nullo" (&h00),
' pertanto utilizzando la funzione di dereferenziazione "String@()", si otterrà un carattere in più alla fine dei caratteri mostrati.
' Per evitare tale inconveniente, è opportuno utilizzare la funzione "Left()", imponendo nel suo secondo argomento il numero prescelto dei caratteri copiati.
  Print Left(String@(p2), 4)
   
  Free(p2)
  Free(p1)
  
End



Riferimenti