Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 13.06.2013
Сообщений: 29
1

Не получается создать в структуре поле с именем (char[]) чтобы компилировалось без warning

30.01.2015, 08:59. Показов 1499. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.

Потребовала жизнь немного разобраться с С, (до этого были 1С и совсем немножко С#), и я засел ковырять некий курс. Дошел до тестовой задачи: дана структура на несколько полей, функция создания, удаления и печати значений этих полей. Все на указателях.

Задание: переписать без указателей.. и тут я встрял

Написал нечто такое (укоротил уже до предела):

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  #include <stdio.h>                                                                                            
  #include <string.h>                                                                                           
                                                                                                                
  struct test                                                                                                   
  {                                                                                                             
      char name[20];                                                                                            
  };                                                                                                            
                                                                                                                
  struct test create (char somename[])                                                                          
  {                                                                                                             
      struct test example =                                                                                     
      {                                                                                                         
          strcpy (example.name, somename)                                                                       
      };                                                                                                        
                                                                                                                
      return example;                                                                                           
  }                                                                                                             
                                                                                                                
  int main (int argc, char *argv[])                                                                             
  {                                                                                                             
                                                                                                                
      struct test ololo = create("ololo");                                                                      
      printf("Struct name: %s\n", ololo.name);                                                                  
                                                                                                                
      return 0;                                                                                                 
  }
Пытаюсь компилировать - стоит мат до потолка:
test.c:14:2: warning: missing braces around initializer [-Wmissing-braces]
test.c:14:2: warning: (near initialization for ‘example.name’) [-Wmissing-braces]
test.c:14:2: warning: initialization makes integer from pointer without a cast [enabled by default]
test.c:14:2: warning: (near initialization for ‘example.name[0]’) [enabled by default]

Может кто объяснить, что я делаю не так? Я что, тут сильно косячу?
Хочется избавиться от всех предупреждений..

Пытался читать http://stackoverflow.com - пока не помогает.

ps
компилятор
gcc version 4.7.2 (Debian 4.7.2-5)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2015, 08:59
Ответы с готовыми решениями:

Необходимо создать в структуре поле строкой
Нужно создать &quot;переменную&quot; academicDegree такой, чтобы я туда смог записать строку. Чтобы в...

Создать стек из 6 элементов, типы Word+Char, вывести поле Char, если word>100
Здравствуйте, помогите пожалуйста решить зачачу. Нужно создать стек из 6 элементов, типы...

Не получается создать файл с именем выделенного элемента в ListBox
Добрый вечер) Мне необходимо,чтобы при нажатии на кнопку button2 происходило добавление в листбокс...

Передача в функцию char*([Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings])
Почему компилятор на это матерится? ObjA.Show(&quot;A&quot;); deprecated conversion from string constant...

4
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
30.01.2015, 09:05 2
Лучший ответ Сообщение было отмечено schdub как решение

Решение

C
1
2
struct test example;                                                       
strcpy (example.name, somename);
1
2 / 2 / 0
Регистрация: 13.06.2013
Сообщений: 29
30.01.2015, 09:17  [ТС] 3
тьфу


Мерси!
0
30 / 47 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
30.01.2015, 10:12 4
сорь что влезаю, а это вообще компилируется?
как понять например
C
1
2
3
4
struct test example =                                                                                     
{                                                                                                         
   strcpy (example.name, somename)                                                                       
};
? да и перегрузки имен и уж тем более методов в чистом си нет...
0
2 / 2 / 0
Регистрация: 13.06.2013
Сообщений: 29
30.01.2015, 11:34  [ТС] 5
Форум на то и есть, чтобы заходить и обсуждать

Компилируется, но с warning

В последнее время на куче форумах обсуждающих сабж, и где-то подцепил такую конструкцию.
Сейчас провел урок, там тоже попросту описано, как Jewbacabra подсказал.

Короче информация из 1000 мест = каша в голове.

Добавлено через 40 минут
В общем тему можно закрывать, это какие-то непонятные особенности массивов. Ну вот не нравится char[] что его там пытаются скопировать.

Если без имени - работает замечательно и без матов:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  #include <stdio.h>                                                                                            
                                                                                                                
  struct point3d                                                                                                
  {                                                                                                             
      int x;                                                                                                    
      int y;                                                                                                    
      int z;                                                                                                    
  };                                                                                                            
                                                                                                                
  struct point3d create (int x, int y, int z)                                                                   
  {                                                                                                             
      struct point3d p = { .x = x, .y = y, .z = z };                                                            
      return p;                                                                                                 
  }                                                                                                             
                                                                                                                
  int main (int argc, char *argv[])                                                                             
  {                                                                                                             
      struct point3d p = create ( 3, 3, 4 );                                                                    
      printf("Point x = %d, y = %d, z = %d created.\n", p.x, p.y, p.z);                                         
                                                                                                                
      return 0;                                                                                                 
  }
0
30.01.2015, 11:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2015, 11:34
Помогаю со студенческими работами здесь

Терминал выдаёт ошибку: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char (*)[50]
Терминал выдаёт ошибку: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘char...

Warning: ‘char* gets(char*)’ is deprecated
Добрый день . встолкнулся с проблемой функции gets. #include &lt;iostream&gt; #include &lt;cstdio&gt; using...

Можно ли создать поле в таблице с именем datetime ? типа datetime
Добрый день ! вопрос почти чайника : Можно ли создать поле в таблице с именем datetime ? типа...

Массив char в структуре
помогите разобраться пожалуйста, уже 2 часа потратил( struct CandyBar { char name; double...

Массив char в структуре
Привет, разбираюсь вот со структурами. Уперся в заполнение массивы char, вложенные в структуру. А...

Поле со списком в ленточной форме, чтобы можно было вносить значения без повторений
Нужна помощи в решении следующей задачки. Есть подчиненная форма в ней поле со списком с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru