2013-04-09 3 views
1
#include <iostream> 

using namespace std; 

int main() 
{ 
    char strin[206]; 

    strin = "sds"; 
    cout<<strin; 
} 

Зачем нужна эта ошибка?Создание строки с char []

error: incompatible types in assignment of 'const char [4]' to 'char [206]' //on line strin = "sds" 

Я выполняю начинающий this учебник

+3

Использование: 'strcpy'. Ой, почему бы просто не использовать 'std :: string'? –

+2

Хехе, Анкур спрашивает «почему», и все отвечают «что делать» :) –

+4

Я рекомендую игнорировать этот учебник. Это ... как поместить это в приятный мир - неважно, красивые слова. Это ужасно. Вы не узнаете от него C++. –

ответ

5

ошибка исходит из того, что вы пытаетесь присвоить один массив в другой. Оператор присваивания не может этого сделать; вам придется скопировать массив, используя strcpy() или std::copy().

Однако, поскольку вы хотите работать на C++, вы действительно должны использовать std::string вместо char[] для хранения строк.

2

Вы не можете назначить массив на другой напрямую. Он должен быть скопирован элементом в элемент.

Использование std::strcpy из <cstring> заголовка

char strin[206]; 
std::strcpy(strin, "sds"); 

 

Использование std::string из <string> заголовка

std::string strin; 
strin = "sds"; 

 

Поскольку вы используете C++, выберите второй.

1

Ваш код;

strin = "sds"; 

должно быть:

strcpy(strin, "sds"); 
0

C/C++ не имеет встроенных операций ввода строк. Вы должны использовать любую функцию:

strcpy(strin, "sds"); // will work in C and C++ 
// strncpy(strin, "sds", 205); // safer if you want to copy user-given string 

или std::string:

std::string strin(206, 0); 

strin = "sds"; // only C++ 
0

Strin является массив, который является Const указатель символов, а не указатель на символов. Вы пытались изменить указатель const, и это запрещено

Вам необходимо скопировать строку. например таким образом

strcpy (string, "sds"); 

(Aware переполнение буфера в общем случае!)

+0

Итак, я понял, что при копировании массива вы фактически не клонируете массив, а просто получаете ссылку на исходный массив, верно? –

+0

'xys =" 123 "' не копирует, он просто меняет указатель (если разрешено). Таким образом, это правильно –

Смежные вопросы