View Full Version : [C] Dimensione stringa e NULL terminatore
Ciao ragazzi,
una domanda davvero stupida ma che non ricordo. Se alloco una stringa str di N char con la malloc e poi scrivo:
str[N] = '\0'
E? corretto o rischio di crashare. Cioè, il mio dubbio è :se alloco dinamicamente N char, in realtà ve ne sono N+1, in quanto c'è il carattere terminatore. Giusto? Quindi se ci accedo non rischio di fare casini. Questa cosa non me la ricordo proprio..
wingman87
22-03-2009, 20:32
Ciao, se allochi n char ne avrai a disposizione n-1 perché dovrai sempre tenere un posto per il terminatore.
A parte questo, se allochi con calloc puoi azzerare direttamente tutta la stringa.
BrutPitt
22-03-2009, 20:34
Il C non riconosce le stringhe come tipo di dato a se' stante, per cui la stringa non e' altro che un array di "char" e segue le leggi di tutti gli altri array.
Ossia:
char str[N];
contiene N elementi da 0 a N-1.
Per cui l'ultimo carattere indicizzabile e' [N-1]
Ciao ragazzi,
una domanda davvero stupida ma che non ricordo. Se alloco una stringa str di N char con la malloc e poi scrivo:
str[N] = '\0'
E? corretto o rischio di crashare. Cioè, il mio dubbio è :se alloco dinamicamente N char, in realtà ve ne sono N+1, in quanto c'è il carattere terminatore. Giusto? Quindi se ci accedo non rischio di fare casini. Questa cosa non me la ricordo proprio.. :mbe: ... se tu allochi N bytes ne hai esattamente N :rolleyes:
la malloc non si preoccupa minimamente dei terminatori o in generale del contenuto di quei bytes.
se allochi N bytes e poi fai str[N] il comportamento del programma é indefinito (puó crashare subito, puó crashare piu tardi, puó non crashare ma andando avanti con la memoria corrotta, ...) perché i bytes sono accessibili con indici che vanno da 0 a N-1, quindi al massimo puoi accedere a str[N-1].
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.