Ошибка преобразования const char в char в структуре? - PullRequest
1 голос
/ 24 декабря 2010

Это немного написано из памяти, поэтому я прошу прощения, если я допустил ошибку в этой публикации. Я создал структуру и хотел присвоить ей имя, но я получаю эту ошибку:

ошибка: несовместимые типы в присваивании const char[3]' to char [15] '

За свою жизнь я пытался понять, что именно здесь не так, я думал, что постоянный символ все еще можно назначить.

# include <stdio.h>
struct type{       
   char name[15];
   int age;          
};

main(){
   struct type foo;
   foo.name = "bar";  //error here
   foo.age=40;
   printf("Name- %s - Age: %d", foo.name, foo.age);
}  

Ответы [ 4 ]

4 голосов
/ 25 декабря 2010

name - статический буфер фиксированного размера.Вам нужно использовать strcpy или аналогичные функции, чтобы присвоить ему строковое значение.Если вы измените его на const char* name, тогда ваш код должен работать как есть.

3 голосов
/ 25 декабря 2010

char name[15]; объявляет массив , который нельзя назначить в C. Используйте подпрограммы копирования строк , чтобы скопировать значения, или объявите name в качестве указателя - char* name;(здесь вам придется беспокоиться о том, что память по-прежнему остается действительной).

Вы можете инициализировать переменную типа структуры в целом:

struct type foo = { "bar", 40 };

Здесь строковый литерал "bar" (четыре байта, включая нулевой терминатор) будет скопирован в массив name.

1 голос
/ 25 декабря 2010

Вам необходимо использовать strcpy для копирования содержимого строк.

0 голосов
/ 25 декабря 2010

Он путает инициализатор с присваиванием.

Как только объект создан (строка "struct type foo;"), вы должны ввести strcpy в "name").

structвведите foo;foo.name = "bar";// ошибка здесь << = Компилятор может только назначить указатель в этой точке, что недопустимо. </p>

==============

Не пишите этот дерьмовый код:

strcpy_s (foo.name, 15, "bar");

Следующее позволяет вам изменять длину в одном месте:

strcpy_s (foo.name, sizeof (foo.name), "bar");

...