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

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

Войти
Регистрация
Восстановить пароль
 
Mgauk
27 / 27 / 1
Регистрация: 03.01.2011
Сообщений: 85
#1

'const char[i]' to 'char[j]' - C++

04.01.2011, 04:51. Просмотров 1042. Ответов 4
Метки нет (Все метки)

Привет всем.
Усердно изучаю плюсы по Стивену Пратта. В ходе изучения возник вопрос, который в книге не освящён.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
struct bob {
       char name[50];
};
 
int main() {
    bob * ranch = new bob[20];
    ranch[0].name = "Hello!";
    return 0;
}
Почему ranch[0].name = "Hello!"; выбивает ошибку
10 C:\Documents and Settings\Admin\Мои документы\char.cpp incompatible types in assignment of `const char[7]' to `char[50]'
???

Такой вот теоретический вопрос к знатокам С++.
Причём если использовать не (динамический) массив структур, а одну структуру присваивается всё нормально.
Заранее благодарен за помощь. Просто не даёт покоя этот вопрос - дальше учу, а неприятный осадок остаётся от непонимания

PS: Среда Dev-C++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2011, 04:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос 'const char[i]' to 'char[j]' (C++):

Чем отличаются объявления const char* и const* char - C++
Прошу объяснить мне, чем отличаются объявления const char* и const* char и как объявить: указатель на константный массив символов, ...

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' - C++
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' void crpost(const statep &amp;struc1) { ...

Error: incompatible types in assignment of 'const char [5]' to 'char [10]' - C++
Код: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; const int m = 10; class name {

Работа со строками - Invalid conversion from 'char' to 'const char*' - C++
#include &lt;iostream&gt; #include &lt;ctype.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; using namespace std; void poisk(int n, char...

[Ошибка] invalid conversion from 'const char*' to 'char*' [-fpermissive] - C++
Решал задачи сам по себе, наткнулся на очень интересную. Вот сама задача: Вы оператор пуска ракет на ядерном подводном ...

Невозможно преобразовать параметр 1 из 'char' в 'const char *' - C++
Дана задача: Задана последовательность, состоящая только из символов ‘&gt;’, ‘&lt;’ и ‘-‘. Требуется найти количество стрел, которые спрятаны...

4
NightmareZ
1398 / 610 / 38
Регистрация: 31.03.2009
Сообщений: 1,978
04.01.2011, 05:00 #2
Цитата Сообщение от Mgauk Посмотреть сообщение
Привет всем.
Усердно изучаю плюсы по Стивену Пратта. В ходе изучения возник вопрос, который в книге не освящён.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
struct bob {
       char name[50];
};
 
int main() {
    bob * ranch = new bob[20];
    ranch[0].name = "Hello!";
    return 0;
}
Почему ranch[0].name = "Hello!"; выбивает ошибку

???

Такой вот теоретический вопрос к знатокам С++.
Причём если использовать не (динамический) массив структур, а одну структуру присваивается всё нормально.
Заранее благодарен за помощь. Просто не даёт покоя этот вопрос - дальше учу, а неприятный осадок остаётся от непонимания

PS: Среда Dev-C++
Замени
C++
1
char name[50];
на
C++
1
char* name;
А, вообще, конечно, лучше на
C++
1
const char* name;
либо оставив массив
C++
1
char name[50];
копируй в него
C++
1
strcpy(ranch[0].name, "Hello!");
А, если быть ещё более придирчивым, то: раз пишешь на C++, может уж лучше использовать std::string?
0
ForEveR
В астрале
Эксперт С++
7992 / 4751 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.01.2011, 05:13 #3
И заодно использовать вектор а не динамический массив.
0
igorrr37
1838 / 1456 / 225
Регистрация: 21.12.2010
Сообщений: 2,411
Записей в блоге: 11
04.01.2011, 05:45 #4
>Почему ranch[0].name = "Hello!"; выбивает ошибку

имя массива является константным указателем, а ты пытаешься его перенаправить на массив "Hello!"
0
Mgauk
27 / 27 / 1
Регистрация: 03.01.2011
Сообщений: 85
05.01.2011, 03:19  [ТС] #5
Всем спасибо за ответы


Цитата Сообщение от NightmareZ Посмотреть сообщение
Замени
C++
1
char name[50];
на
C++
1
char* name;
А, вообще, конечно, лучше на
C++
1
const char* name;
либо оставив массив
C++
1
char name[50];
копируй в него
C++
1
strcpy(ranch[0].name, "Hello!");
Так и делаю, просто была интересна теоретическая сторона моей ошибки

А, если быть ещё более придирчивым, то: раз пишешь на C++, может уж лучше использовать std::string?
Ещё не дочитал до стрингов
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2011, 03:19
Привет! Вот еще темы с ответами:

Ошибка invalid conversion from 'const char*' to 'char*' - C++
Я в С++ новенький. Поэтому опыта еще нет, да и знаний мало. ПОдскажите пожалуйста, чего вылетает ошибка invalid conversion from 'const...

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& - C++
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned short); ...

Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" - C++
Вроде все правильно а все равно не работает. Подскажите в чем ошибка #include &lt;iostream&gt; template&lt;typename T&gt; inline const T...

Invalid conversion from 'const char*' to 'char' - C++
Здравствуйте. Смысл нижеприведенного кода - сосчитать количество запятых и точек во вводимом тексте. Редкостный быдлокод, неудивительно,...


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

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

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