[C]"Tappare" le stringhe: quando è necessario?

mark9

Nuovo Utente
45
3
Domanda sicuramente banale, ma purtroppo mi vengono dei dubbi..
In alcuni programmi in C a volte vedo la necessità di tappare le stringhe aggiungendo il carattere '\0' e altre volte no...da cosa dipende? Cioè quando vengono automaticamente "tappate" e quando no?
Grazie mille.
 

1nd33d

Utente Attivo
653
279
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
HDD
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
GPU
XFX RX480 GTR Black Edition
Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
PSU
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
OS
Windows 10 64bit - Linux Mint 18
Il carattere terminatore '\0', detto anche NUL, è il risultato di una scelta implementativa del linguaggio C fatta decenni fa. Quel carattere serve alle funzioni che lavorano con stringhe per capire dove la stringa termina nella memoria ram.
Detto questo, è evidente come le funzioni che scrivono stringhe nella memoria tendono ad aggiungere automaticamente il carattere terminatore. Un caso in cui potrebbe essere necessario aggiungere NUL manualmente è per esempio se vai a scrivere i singoli char in un vettore che poi devi usare come stringa.
 
Ultima modifica:
  • Mi piace
Reazioni: _Gra_ e Mursey

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Quando vuoi creare una stringa. In C, il concetto di stringa è il seguente: una sequenza (finita, naturalmente) di caratteri (char, wchar_t ecc) terminata dal carattere \0 (ASCII NUL). Laddove quest'ultimo mancasse, si parla di array di caratteri e basta. Ad esempio:
Codice:
char s[] = {'a', 'b', 'c'};
se usi una funzione che si aspetta una stringa (strlen, strcpy ecc.) hai UB. Devi o renderla tale (appunto, «tappandola») o usare funzioni che agiscono su blocchi di dati grezzi (mem*).
 
  • Mi piace
Reazioni: _Gra_

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili