2015-07-07 2 views
0

Я должен упомянуть, что я нахожусь на Turbo C++ (да, старый), потому что это требуется моей школе.Назначение строки массиву char в структуре в Turbo C++

У меня есть структура вроде этого:

struct move{ 
int power; 
int pp; 
char name[10]; 
}; 

Когда я пытаюсь сделать новую переменную, если я это сделать:

move tackle; 
tackle.pp = 10; 
tackle.power = 20; 
tackle.name = "tackle"; 

Я получаю сообщение об ошибке, как:

Error NONAME00.CPP 11: Lvalue required

Но это работает:

move tackle = {20, 10, "tackle"}

Это работает.

Что я делаю неправильно?

P.S. строка 11 - tackle.name = "tackle", извините, если раньше не было ясно.

+1

Таинственная линия 11, где она? Можете ли вы добавить количество строк? – WorldSEnder

+0

Я думаю, что просто указать, какая строка производит ошибку, будет достаточной. –

+0

Возможный дубликат [Присвоение строки символов массиву символов] (http://stackoverflow.com/questions/10088661/assigning-a-string-of-characters-to-a-char-array) –

ответ

3

Вы не можете присвоить массив, но вы можете инициализировать его.

tackle.name = "tackle"; 

это назначение, в то время как

move tackle = {20, 10, "tackle"}; 

является инициализация.

Чтобы заменить содержимое массива, используйте strcpy:

strcpy(tackle.name, "tackle"); 

или, лучше, использовать string, если вы позволили:

#include <string> 

struct move{ 
int power; 
int pp; 
string name; 
}; 
2

Вы используете строку в стиле С, и вы должны инициализировать его с помощью

strcpy(tackle.name, "tackle"); 
+1

еще лучше: 'strncpy (tackle.name," tackle ", 9)' – WorldSEnder

+0

@WorldSEnder 'strncpy (dest, src, 9)' не лучше - не гарантирует, что 'dest' имеет завершающий' '\ 0'' , 'tackle.name [0] = 0; strncat (dest, src, sizeof dest) 'делает. – chux

0

Эта линия

tackle.name = "tackle"; 

пытается назначить один массив другому, который не поддерживается в C или C++.

Однако инициализация, например, char name[10] = "tackle", соответствует стандарту и поддерживается.

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