1. Si la chaîne (par exemple « éponge ») ne va pas se changer partout en vous programme, vous pouvez certainement faire
char* t = "terry";
et oublier la mémoire allouée à la chaîne comme sera libéré par lui-même. Cependant, une meilleure pratique de programmation pour les constantes chaînes serait déclarerait t
que const char*
comme ceci:
const char* t = "terry";
Mais si elle va se changer, alors il est soit
char* t = new char[6];
strcpy(t, "terry");
ou
char t[6];
strcpy(t, "terry");
Dans le premier cas, où new
opérateur est utilisé, vous devrez libérer la mémoire allouée avec new
après que vous ne plus besoin de la chaîne:
delete[] t;
Dans le second cas, la mémoire sous-jacente la piqûre sera libérée automatiquement lorsque t
quitte le champ C de (des accolades), il a été déclaré dans (mais si t
est membre d'un objet , la mémoire ne sera libérée que lorsque l'objet sera détruit).
2. Après
char* t;
t = new char[6];
t = "terry";
t
serait vraiment pointer « éponge », mais le pointeur/adresse vous devez libérer la mémoire allouée à new
est perdu pour de bon.
3. Les terminateurs de chaîne vides ('\ 0') sont comme les autres caractères: ils doivent résider quelque part dans la mémoire. Vous avez été assez sage pour allouer 6 octets pour « éponge », qui est de 5 caractères de longueur: après
char* t = new char[6];
strcpy(t, "terry");
le sixième octet du bloc de mémoire pointé par t
maintient la terminaison nulle. Mais
char* t;
n'alloue pas de mémoire en dehors du pointeur t
. Donc, si vous voulez qu'une chaîne ne contienne qu'une terminaison nulle (être de longueur nulle), vous pouvez le faire de cette façon:
char* t = new char[1];
t[0] = '\0';
N'utilisez pas 'char *', utilisez 'std :: string 'à la place (' std :: vector 'si vous vous sentez vraiment rebelle). –
Pourquoi écrivez-vous du code comme ça en C++? –
BTW lol à '// 0 est la valeur ascii de '\ 0'' :) –