Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
CSCO12103692
2 / 2 / 0
Регистрация: 13.06.2013
Сообщений: 29
1

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

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

Всем привет.

Потребовала жизнь немного разобраться с С, (до этого были 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2015, 08:59
Ответы с готовыми решениями:

Создать стек из 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...

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

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

4
Jewbacabra
Эксперт PHP
3785 / 3120 / 1371
Регистрация: 24.04.2014
Сообщений: 9,481
30.01.2015, 09:05 2
Лучший ответ Сообщение было отмечено schdub как решение

Решение

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


Мерси!
0
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
30.01.2015, 10:12 4
сорь что влезаю, а это вообще компилируется?
как понять например
C
1
2
3
4
struct test example =                                                                                     
{                                                                                                         
   strcpy (example.name, somename)                                                                       
};
? да и перегрузки имен и уж тем более методов в чистом си нет...
0
CSCO12103692
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2015, 11:34

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

Инициализация массива char'ов в структуре
Вот создал такую структуру struct ubs { //Конструктор с параметрами по умолчанию ...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru