2014-09-13 2 views
-1

Почему две разные строки литералов не могут быть заменены на = operator? я подумал, может быть, это потому, что они являются массивом литералов и два различных массивов наклоняют заменить задавались вопрос, есть еще одна причины, и если то, что я сказал, это нонсенс пример:Почему две разные строки литералов не могут быть заменены на = operator?

char s1[] = "ABCDEFG"; 
char s2[] = "XYZ"; 
s1=s2; ERROR 

я знаю, как их заменить но не знаю, почему не может быть заменен таким образом.

+0

вниз избирателю бы у объяснить? – user3783574

+0

Просьба уточнить, что вы делаете с помощью «ERROR» – jpo38

+0

Я не думаю, что вы сказали, что причина Я ценю ур руководства в любом случае – user3783574

ответ

2

Массивы не имеют оператора присваивания и не могут использоваться в качестве инициализаторов для других массивов, потому что они преобразуются в указатели на их первые элементы, когда они используются в выражениях.

Используйте стандартную функцию C strcpy, объявленную в заголовке <cstring>, если вы хотите «назначить» один массив символов другим, содержащим строки. Например

#include <cstring> 

//... 

char s1[] = "ABCDEFG"; 
char s2[] = "XYZ"; 

//... 

std::strcpy(s1, s2); 

Примите во внимание, что в общем случае s1 должен быть достаточно большим, чтобы вместить все символы s2 включая treminating нуля.

1

Если вы используете C++, и, очевидно, вы не очень хорошо знакомы с указателями .... используя зЬй :: строка может быть проще:

#include <string> 
std::string s1 = "ABCDEFG"; 
std::string s2 = "XYZ"; 
s1=s2; // No ERROR! 
+0

Я знаю это, но хотел знать, почему почему не может быть заменен таким образом? – user3783574

+1

Поскольку ваш исходный код копирует указательные адреса, а не указывает значения. – jpo38

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