2011-12-16 8 views
3

Je suis en train de placer des pointeurs ici pour pointer sur un nom et un point pour le nommer de nouveau mais obtenir le point lent. Comment se fait-il que lorsque j'utilise cout << strlen(tail);, il ne cesse de me dire que la longueur est de 3? Même si j'entre quelque chose qui est 12?Pointeurs et longueur de chaîne

#include <iostream> 
#include <stdio.h> 
#include <string.h> 
using namespace std; 

int main() 
{ 
    char name[0]; 
    cout << "Please enter your name: "; 
    cin.getline(name, 256); 
    cout << "Your name: " << name << endl; 

    char* head = name; 
    cout << head[6] << endl; 

    char* tail = name; 
    cout << strlen(tail); 

    return 0; 
} 
+0

tip: en général, vous devriez utiliser 'string' au lieu de' char * 'dans C++. – amit

+1

+1 pour une question clairement formatée. –

+1

Oui, débordement de tampon! – nobsid

Répondre

6

Avec

char name[0]; 

Vous allouent un buffer de taille 0 dans lequel pour stocker des données. Vous devez faire assez grand pour la plus longue chaîne que vous entrerez (plus 1 pour la terminaison NUL), qui serait 256 dans ce cas (parce que vous lisiez 255 caractères et un NUL avec cin.get(name, 256)):

char name[256]; 
+0

Alors c'est juste plus sûr de le définir grand? – mystycs

+0

@mystycs non, quand vous faites 'char name [0] 'vous ne vous donnez pas de _any_ mémoire à utiliser. Vous avez besoin de 256 parce que vous faites 'cin.getline (nom, 256)'. Si vous en avez besoin de moins, changez la taille du tampon _et_ le 'cin.getline (nom, x)' pour 'x' pour correspondre à la taille de la mémoire tampon. De plus, si vous ne savez pas ce que vous faites, travailler avec des chaînes C peut être dangereux (et même si vous le faites, c'est parfois dangereux). Je recommande que, ** après que vous soyez à l'aise avec les pointeurs et les tableaux **, utilisez 'std :: string' pour les chaînes et' std :: vector' pour les tableaux. –

+0

Eh bien, je pensais que si je l'ai mis à 0, il se développera comme quelqu'un entre un nom ou ne fonctionne pas comme ça? – mystycs

5

Le nom est déclaré comme étant de longueur nulle. Cela va être un problème.

Questions connexes