Указатели и длина строки - PullRequest
3 голосов
/ 17 декабря 2011

Я устанавливаю указатели здесь один, чтобы указать на имя и один, чтобы снова указать на имя, но получить длину.Почему, когда я использую cout << strlen(tail);, он продолжает говорить мне, что длина равна 3?Даже если я введу что-то 12?

#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;
}

Ответы [ 2 ]

6 голосов
/ 17 декабря 2011

С

char name[0];

Вы выделяете буфер размером 0 для хранения данных. Вам нужно сделать его достаточно большим для самой длинной строки, которую вы введете (плюс 1 для терминатора NUL), которая в данном случае будет 256 (потому что вы читаете 255 символов и NUL с cin.get(name, 256)):

char name[256];
5 голосов
/ 17 декабря 2011

Имя объявлено как нулевая длина.Это будет проблемой.

...