Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
#1

Вектор строк и массив указателей на тип char - C++

16.09.2012, 16:02. Просмотров 2667. Ответов 2
Метки нет (Все метки)

Помогите, пожалуйста, с одной задачей. Сижу голову ломаю. Никак не могу понять почему эта ошибка выскакивает.
Напишите программу, читающую строки в вектор. Скопируйте этот вектор в массив указателей на тип char.
Сама ошибка появляется в 34 строке где хочу скопировать вектор vector<string> в массив char *.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <windows.h>
#include <string>
#include <vector>
using namespace std;
 
int main()
{
    setlocale(0, "");
 
    vector<string> vector_string;
    char temp[100];                 // для временного хранения одной строки
    size_t n;                       // общее количество строк
 
    cout << "Введите количество строк: ";
    cin >> n;
    cin.get();
    cout << endl;
 
    for (size_t i=0; i<n; i++)
    {
        cout << "Введите строку " << (i+1) << "/" << n << ": ";
        cin.getline(temp, 100);
        vector_string.push_back(temp);
    }
 
    // Скопировать вектор в массив указателей на тип char ---------
    char **str_arr = new char* [n];
    for (size_t r=0; r<n; r++)
        str_arr[r] = new char [100];
 
    for (size_t r=0; r<n; r++)
        strcpy(str_arr[r], vector_string[r]);  // вот здесь ошибка
 
 
    for (size_t r=0; r<n; r++)
        delete [] str_arr[r];
    delete [] str_arr;
    // ---------------------------------------------------------------
 
 
    cout << endl << endl;
    system("pause");
    return 0;
}
В 34 строчке вот такая ошибка:
\main.cpp|34|error: cannot convert 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'const char*' for argument '2' to 'char* strcpy(char*, const char*)'|
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2012, 16:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вектор строк и массив указателей на тип char (C++):

Запись вектора строк в массив указателей на тип char - C++
Решаю задачу 4.34 из книги Липпмана С. Язык программирования С++. Вводный курс. 4-е изд. Задание: 1) Напишите программу, читающую...

Напишите программу, присваивающую значения элементов списка указателей на символьные строки в стиле С (тип char* ) элементам вектора строк - C++
Напишите программу, присваивающую значения элементов списка указателей на символьные строки в стиле С (тип char* ) элементам вектора строк...

Cоздать и заполнить массив строк в стиле Си (квадратную матрицу указателей на char) - C++
Нужно создать массив символьных указателей на 10 элементов и выполните вывод всех строк в 10 столбиков Нужно заполнить массив...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

вектор string в масив указателей на char - C++
Доброго дня, комрады. Вот несколько дней как начал разбираться в С++ по 4-му вводному курсу липмана. наткнулся на задачку в общем-то...

Массив указателей на массив строк и сортировка массива указателей - C++
Добрый день. Поступил вопрос. Есть задача. У нас встроенный массив char mass;.Мы вводим строки до тех пор, пока не будет заполнен массив...

2
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
16.09.2012, 16:05 #2
C++
1
strcpy(str_arr[r], vector_string[r].c_str());
А память надо выделять как
C++
1
str_arr[r] = new char[vector_string[r].length() + 1];
2
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
16.09.2012, 16:24  [ТС] #3
Кот Ангенс, Спасибо. Так все работает.
Правда не совсем понимаю, почему без функции c_str() ничего не получается. Ведь vector_string[r] это же отдельная строка.
Насчет выделения памяти отдельное спасибо.)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2012, 16:24
Привет! Вот еще темы с ответами:

Как удалить массив указателей char* - C++
Столкнулся с проблемой при написании деструктора к классу, а именно не получается корректно удалить массив указателей, при удалении выдает...

Объяснить различия в работе указателей на целое число и указателей на const char (строки в стиле Си) - C++
Уважаемые программисты, возникло несколько вопросов касательно указателей. Почему при выводе указателя на int нужна звёздочка (*), а...

Различия указателей char* от указателей других типов - C++
Помогите пожалуйста разобраться! Прочитал раздел про указатели и даже вроде бы понял. Что касается указателей на тип int. Но что...

Смысл const char* и о том, какой тип строк лучше использовать - C++
Я никак не могу понять смысла const char*. Это строка в стиле C, я знаю. Но чем эта запись отличается от char*? Или вообще, просто char?...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.