Форум программистов, компьютерный форум CyberForum.ru

Нужна консултация с указателем char * в потоке - C++

Восстановить пароль Регистрация
 
Woloc Graube
0 / 0 / 0
Регистрация: 09.02.2013
Сообщений: 18
22.07.2013, 19:13     Нужна консултация с указателем char * в потоке #1
Вот, собственно, начал учить структуры. Чуток сам разбирался с указателями, но не до конца все понял.
В общем, есть код:

...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct client
{
    char *name;
    char *first_name;
    int years;
}bbb;
 
int main(void)
{
    cout << "Enter your name >" << endl;
    cin >> bbb.name;
        cout << bbb.name << endl;
    _getch();
}
...

Программа в конце завершается ошибкой: invalid NULL pointer.
Понятно, что все будет работать, если записать вместо "char *name" "char name[]" но здесь же как-то через указатели все лепится. Я так понимаю, вместо самой строки в поток записывается адрес?
Можете подсказать, как грамотно писать такие вот штуки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2013, 19:13     Нужна консултация с указателем char * в потоке
Посмотрите здесь:

C++ error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *'
(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& C++
C++ Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь(
C++ Не могу создать поток( Нужно чтобы функция запускается в потоке и работала там пока не закроем в потоке)
C++ Переделать функцию c указателем на int, на функцию с указателем на void
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
akk
 Аватар для akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
22.07.2013, 19:16     Нужна консултация с указателем char * в потоке #2
Woloc Graube, в вашей структуре память под указатель не выделяется.
Попробуйте так
C++
1
2
3
4
5
6
struct client
{
    char name[80];
    char first_name[80];
    int years;
}bbb;
Woloc Graube
0 / 0 / 0
Регистрация: 09.02.2013
Сообщений: 18
22.07.2013, 19:21  [ТС]     Нужна консултация с указателем char * в потоке #3
akk, а если писать через указатель? Разве не будет написание "char *name;" создавать переменную и от нее по ее адресу дальше записывать всю строку?
Значит я вообще тогда в указателях не разобрался.
akk
 Аватар для akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
22.07.2013, 19:27     Нужна консултация с указателем char * в потоке #4
Woloc Graube, вот еще посмотрите
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cstring>
struct client
{
    char *name;
    char *first_name;
    int years;
} bbb;
using namespace std; 
const int SIZE = 1024;
int main(void)
{
    char BUF[SIZE];
    cout << "Enter your name >" << endl;
    cin >> BUF;
    bbb.name = new char[strlen(BUF)+1];
    strcpy(bbb.name, BUF);
    cout << bbb.name << endl;
    cin.get();
}
Добавлено через 3 минуты
Цитата Сообщение от Woloc Graube Посмотреть сообщение
Разве не будет написание "char *name;" создавать переменную и от нее по ее адресу дальше записывать всю строку?
чтобы в указатель записать данные, нужно выделить сначала память (оператор new (16строчка в моем коде)).
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
22.07.2013, 19:34     Нужна консултация с указателем char * в потоке #5
Woloc Graube, указатель - это переменная, в которой записан адрес. в сам указатель нельзя записать строку. можно динамически выделить память под строку и адрес начала этой строки присвоить указателю
Woloc Graube
0 / 0 / 0
Регистрация: 09.02.2013
Сообщений: 18
22.07.2013, 19:43  [ТС]     Нужна консултация с указателем char * в потоке #6
akk, нет, так возьни слишком много
Первый вариант мне больше понравился. Спасибо огромное.
А не знаете, где и в чем можна попрактиковаться с указателями?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2013, 19:54     Нужна консултация с указателем char * в потоке
Еще ссылки по теме:

В чем разница между указателем и указателем на указатель? C++
Операции с указателем к char[] C++
array char* to char* (значения массива указателей в один указатель) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
akk
 Аватар для akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
22.07.2013, 19:54     Нужна консултация с указателем char * в потоке #7
Цитата Сообщение от Woloc Graube Посмотреть сообщение
А не знаете, где и в чем можна попрактиковаться с указателями?
Если нужны именно задания то почитайте главы по указателям в книге "Б.Керниган, Д. Ритчи: Язык программирования C", там в конце главы должны быть задания. А вообще по развивайте далее этот ваш код, например сделайте класс с несколькими конструкторами и по выделяете память указателям и т д.
Yandex
Объявления
22.07.2013, 19:54     Нужна консултация с указателем char * в потоке
Ответ Создать тему
Опции темы

Текущее время: 02:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru