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

Передача массива char в функцию

05.10.2020, 17:09. Показов 1545. Ответов 3

Author24 — интернет-сервис помощи студентам
Привет, неправильно передаю в функцию массив. Подскажите в чем проблема. На сколько я помню имя является указателем на массив.
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
27
28
29
30
31
32
#include <iostream> 
using namespace std;
int const SIZE = 40;
char arr_m[] = "Millenium Munch";
struct CandyBar {
    char logo[SIZE];
    double weight;
    int calories;
};
void fill(CandyBar& box, char* name = arr_m, double wt = 2.85, int cl = 350);
void fill(CandyBar& box, char* name, double wt, int cl) {
    box.logo[SIZE] = *name;
    box.weight = wt;
    box.calories = cl;
}
void show(CandyBar& box) {
    cout << box.logo << endl;
    cout << box.weight << endl;
    cout << box.calories << endl;
}
int main() {
    CandyBar mylove;
    char logo[SIZE];
    double weight;
    int calories;
    cin >> logo;
    cin >> weight;
    cin >> calories;
    fill(mylove, logo, weight, calories);
    show(mylove);
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2020, 17:09
Ответы с готовыми решениями:

Передача массива char в функцию
Ув. программисты, Ниже прикрепляю фукнцию, которая считывает число в двоичной системе и записывает...

Передача в функцию массива char
Есть функция : char f1(const char *str); Мне нужно её вызвать . Делаю так: char s; ...

Передача массива типа char в функцию
Не пойму в чем ошибка, выдает что ошибка в типе char. Объясните пожалуйста что не так. int min()...

Передача массива Char в функцию. Как быть?
Столкнулся вот с такой проблемой, что #include &lt;iostream&gt; #include &lt;fstream&gt; #include...

3
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
05.10.2020, 17:15 2
Лучший ответ Сообщение было отмечено RomulSi как решение

Решение

Сишные массивы не копируются через =. Нет, даже через box.logo[SIZE] = *name не копируются. Это копирует одну букву, причем, мимо массива.
Пользуйтесь strcpy.
1
58 / 48 / 14
Регистрация: 23.02.2016
Сообщений: 433
05.10.2020, 18:33 3
Renji, а вы не знаете почему они не копируются через присваивание? Массив - это список однородных элементов, а структура позволяет объединять разнородные элементы. Массив описывает список значений, а структура описывает единственное значение. В массиве работает арифметика указателей, если к текущему указателю прибавить единицу, то происходит переход на следующи элемент. А в структуре я не знаю где указатель, возможно на первое поле. В этом причина? Также не очень понятно почему одни языки сохраняют элементы массива построчно (C++ например), а другие - по столбцам (Fortran например). Вроде бы какая разница, ну будет реализована функция доступа к элементу по-другому и всё, а как объём памяти, так и скорость обращения к ней вроде бы не зависит от способа размещения элементов.
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
05.10.2020, 20:19 4
"Иной закон из рода в род. от деда переходит к внуку. Он благом был, но в свой черёд. стал из благодеянья мукой." (c) Фауст.
Невозможность копирования массивов это просто рудимент, тянущийся еще откуда-то из прародителей Си. В плюсах можно использовать std::array<char,SIZE> (и переводить в char* через str.data()), оно копируется нормально. Правда, в случае строк оно будет копироваться не очень оптимально (скопирует SIZE символов, даже если в строчке всего одна буква).
0
05.10.2020, 20:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2020, 20:19
Помогаю со студенческими работами здесь

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

Передача в функцию char**
Здравствуйте! Подскажите как передавать в функцию void переменную char**, а то ошибку пишет что...

Передача char в функцию
подскажите, почему при передаче в функцию, массив char приобретает такие значения &quot;a&quot;, &quot;0&quot;, &quot;0&quot;,...

Передача char в функцию
Привет всем! Помогите, что неправильно: есть функция void send_new_object(char *g, char *h, int...

Передача FILE и char[x] в функцию
Собственно есть такой кусок кода: int Parser(int n, int value) { FILE *fp =...

Передача в функцию unsigned char [ ]
Заполняю массив unsigned char sizeBuf; for (int i = 0; i &lt; 4;...


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

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