C struct problem - PullRequest
       10

C struct problem

6 голосов
/ 16 ноября 2010

Я пытаюсь узнать о структурах в C, но я не понимаю, почему я не могу присвоить заголовок как мой пример:

#include <stdio.h>

struct book_information {
 char title[100];
 int year;
 int page_count;
}my_library;


main()
{

 my_library.title = "Book Title"; // Problem is here, but why?
 my_library.year = 2005;
 my_library.page_count = 944;

 printf("\nTitle: %s\nYear: %d\nPage count: %d\n", my_library.title, my_library.year, my_library.page_count);
 return 0;
}

Сообщение об ошибке:

books.c: In function ‘main’:
books.c:13: error: incompatible types when assigning to type ‘char[100]’ from type ‘char *’

Ответы [ 4 ]

9 голосов
/ 16 ноября 2010

LHS - это массив, RHS - указатель. Вам нужно использовать strcpy для помещения указанных байтов в массив.

strcpy(my_library.title, "Book Title");

Следите за тем, чтобы здесь не копировались исходные данные длиной более 99 байт, поскольку вам нужно место для завершающего строку нулевого символа ('\ 0').

Компилятор пытался рассказать вам, что было не так подробно:

ошибка: несовместимые типы при присвоение типа «char [100]» из введите ‘char *’

Посмотрите на свой оригинальный код еще раз и посмотрите, имеет ли это смысл сейчас.

6 голосов
/ 16 ноября 2010

Как говорится в сообщении, проблема в том, что вы пытаетесь назначить несовместимые типы: char* и char[100]. Вам нужно использовать функцию типа strncpy, чтобы скопировать данные между 2

strncpy(my_library.title, "Book Title", sizeof(my_library.title));
3 голосов
/ 16 ноября 2010

title - это массив символов - их нельзя назначить в C. Используйте strcpy(3).

1 голос
/ 16 ноября 2010

char * и char [100] - это разные типы.

Вы хотите скопировать эти элементы char в буфер .title.

strncpy(my_library.title, "Book Title", sizeof(my_library.title));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...