Strncpy (): differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
(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...")
 
Nessun oggetto della modifica
 
(9 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 9: 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)
 
<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>' ''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
 






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