|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6627
|
[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.. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2787
|
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. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
|
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] Ultima modifica di BrutPitt : 22-03-2009 alle 21:38. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
... se tu allochi N bytes ne hai esattamente N 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]. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:36.












... se tu allochi N bytes ne hai esattamente N








