С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 916
1

Инициализация массива строк нулями

18.06.2019, 18:50. Показов 3234. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть структура. Как проинициализировать значения полей '\0' ?
C++
1
2
3
4
5
6
7
8
9
struct Name {
    char firstName[31];
    char middleName[7];
    char lastName[36];
    Name() 
    {
        ?
    }
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2019, 18:50
Ответы с готовыми решениями:

Инициализация массива нулями с помощью {}
зачем после размера массива указываются скобки int mas = {}?

Инициализация массива строк
Здравствуйте! Подскажите, как можно инициализировать массив строковых констант неопределенного...

Инициализация массива строк string в классе
Как сделать подскажите? #include <iostream> #include <string> #include <Windows.h> using...

Инициализация массива строк внутри класса
Доброго времени суток! Есть такая проблема... Дан класс, в нем есть массив строк и мне нужно в...

15
Отпрыск ChatGPT
31 / 28 / 4
Регистрация: 18.06.2019
Сообщений: 143
18.06.2019, 18:58 2
Senarist,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct Name {
    char firstName[31];
    char middleName[7];
    char lastName[36];
    Name()
        :firstName({'\0'}),
         middleName({'\0'}),
         lastName({'\0'})
    {
        ?
    }
};
 
int main()
{
    Name name();
}
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
18.06.2019, 19:04 3
C++
1
2
3
4
5
6
struct Name {
    char firstName[31]{};
    char middleName[7]{};
    char lastName[36]{};
    Name() = default; // ежели он тут единственный, можно и не писать
};
1
Отпрыск ChatGPT
31 / 28 / 4
Регистрация: 18.06.2019
Сообщений: 143
18.06.2019, 19:12 4
zayats80888, опередил. Пришел к этому опытным путем только что, хотел исправить. В header'ах это работает?
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
18.06.2019, 19:16 5
Цитата Сообщение от Azawa Посмотреть сообщение
В header'ах это работает?

попробуйте
Цитата Сообщение от Azawa Посмотреть сообщение
опытным путем
Добавлено через 2 минуты
Senarist, забыл упомянуть, нужна поддержка с++11 для такой инициализации
0
Azawa
18.06.2019, 19:17
  #6

Не по теме:

zayats80888, Эх, я в рекстестере делал. Ну хорошо.

0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 916
18.06.2019, 19:17  [ТС] 7
Цитата Сообщение от Azawa Посмотреть сообщение
В header'ах это работает?
В .h не работает списком (
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
18.06.2019, 19:32 8
Цитата Сообщение от Senarist Посмотреть сообщение
В .h не работает списком (
То что предложил Azawa нигде не сработает

Добавлено через 54 секунды
круглые скобки уберите
1
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
18.06.2019, 19:35 9
zayats80888, в c++98 можно так:
C++
1
2
3
4
5
6
7
8
9
10
struct Name {
    char firstName[31];
    char middleName[7];
    char lastName[36];
    Name()
         : firstName(),
           middleName(),
           lastName()
    {   }
};
Т.е. это самый переносимый вариант из всех.
2
Отпрыск ChatGPT
31 / 28 / 4
Регистрация: 18.06.2019
Сообщений: 143
18.06.2019, 20:04 10
zayats80888, все работает. https://rextester.com/QKG50626
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
18.06.2019, 20:08 11
Цитата Сообщение от Azawa Посмотреть сообщение
все работает
галочку Show compiler warnings поставьте
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 916
18.06.2019, 20:23  [ТС] 12
Цитата Сообщение от zayats80888 Посмотреть сообщение
галочку Show compiler warnings поставьте
VS2015 совсем это не пропускает, тут хотя бы ворнингс
0
Отпрыск ChatGPT
31 / 28 / 4
Регистрация: 18.06.2019
Сообщений: 143
18.06.2019, 20:28 13
zayats80888, действительно. Но почему член класса встроенного типа нельзя инициализировать списком, а переменные встроенного типа объявленные в теле функций - можно? Предупреждение не выдает, во всяком случае.
C++
1
2
3
4
5
int main()
{
    char a[80]{'\0'};
    return 0;
}
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
18.06.2019, 20:34 14
Цитата Сообщение от Azawa Посмотреть сообщение
char a[80]{'\0'};
у вас там не так написано, вы вот это попробуйте
C++
1
2
3
4
5
int main()
{
    int k[5]({ 2 });
    return 0;
}
1
Отпрыск ChatGPT
31 / 28 / 4
Регистрация: 18.06.2019
Сообщений: 143
18.06.2019, 21:04 15
zayats80888, Понял свою ошибку. Моя проблема была в том, что до этого я ошибочно предполагал, что список инициализации членов класса это какая-то особенная конструкция присваивания, а не явный вызов a(x), и поэтому считал, что круглые скобки обязательны. Теперь все стало ясно, значит, в данном случае они не нужны. Спасибо.

А такое ошибочное суждение вызвали многочисленные примеры кода, где встроенные типы вроде int так же инициализируются только через круглые скобки. Но я не понимаю, почему нельзя использовать =, так же могло быть намного понятнее:
C++
1
2
3
4
A()
: id = 3,
  balance = 2.4,
  isAvail = true
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
18.06.2019, 21:09 16
Azawa, если с английским дружите, тут можно почитать, например https://en.cppreference.com/w/... ialization
1
18.06.2019, 21:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2019, 21:09
Помогаю со студенческими работами здесь

Инициализация членов класса нулями
Необходимо инициализировать члены класса нулями. class ID { public: int GetKey() { return...

Инициализация объекта нулями или мусором
Здравствуйте. Я бы воспользовался поиском, но даже не знаю, как ему сформулировать вопрос. ...

инициализация массива, вывод массива и обработка массива должны быть реализованы с помощью функций.
1 Последовательность a1; a2; ...; an состоит из нулей и единиц. Поставить в начало этой...

Забивание нулями строк
В зависимости от ситуации необходимо забить левую часть строки нулями. Решил так: string F;...


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

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