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

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

27.04.2014, 00:23. Показов 13729. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем! Помогите, что неправильно: есть функция
C++ Скопировано
1
2
3
4
5
6
    void send_new_object(char *g, char *h, int j)
    {
        char name_nach_punkta = *g;
        char name_kon_punkta = *h;
        nomer_marshrouta = j;
    }
в которую посылается
C++ Скопировано
1
2
3
4
5
char add_name_nach_punkta[30];
    char add_name_kon_punkta[30];
    int add_nomer_marshrouta;
...
send_new_data(add_name_nach_punkta, add_name_kon_punkta, add_nomer_marshrouta);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2014, 00:23
Ответы с готовыми решениями:

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

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

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

13
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,241
27.04.2014, 00:25 2
lion_wine, вы пытаетесь присвоить одной переменной значение всего массива.Либо копируйте массив,либо работайте с указателями.
0
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.04.2014, 00:26 3
C++ Скопировано
1
2
3
4
5
6
void send_new_object(char *g, char *h, int j)
    {
        char name_nach_punkta = *g;
        char name_kon_punkta = *h;
        nomer_marshrouta = j;
    }
Смысл такой ф-ции?
1
8 / 8 / 2
Регистрация: 08.03.2014
Сообщений: 101
27.04.2014, 00:37  [ТС] 4
а разве указатель уже не даст возможности обращаться к другим участкам памяти? а как передать весь массив?

Добавлено через 1 минуту
забыл дописать
C++ Скопировано
1
2
3
    char name_nach_punkta[30];
    char name_kon_punkta[30];
    int nomer_marshrouta;
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,241
27.04.2014, 00:55 5
lion_wine, вы и передаете весь массив.Ошибка в другом.
0
19410 / 10029 / 2443
Регистрация: 30.01.2014
Сообщений: 17,682
27.04.2014, 01:02 6
S_el, не совсем, он передает указатель, к которому был автоматически приведен массив.
lion_wine, тут надо добавить, что массивы нельзя передавать по значению. Потому что они не объекты первого класса (по историческим причинам). Поэтому обычно массивы копируют поэлементно; т.е. указатель + размер и копия (функции strcpy, strncpy, memcpy, std::copy и т.п.) в другой массив.
Чтобы передать массив целиком, как объект, можно использовать, например, std::array (С++11) или эквивалентный подход с собственным типом.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.04.2014, 01:03 7
Цитата Сообщение от lion_wine Посмотреть сообщение
забыл дописать
Это где объявляется?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,241
27.04.2014, 01:06 8
Цитата Сообщение от DrOffset Посмотреть сообщение
S_el, не совсем, он передает указатель, к которому был автоматически приведен массив.
Фраза "передаете весь массив" намного более понятна,чем передача указателя.
0
19410 / 10029 / 2443
Регистрация: 30.01.2014
Сообщений: 17,682
27.04.2014, 01:17 9
Цитата Сообщение от S_el Посмотреть сообщение
Фраза "передаете весь массив" намного более понятна,чем передача указателя.
Если ты знаешь что за ней стоит, то да. Но лично мне показалось, что у автора как раз вся проблема из-за того, что он думал, что может передать "весь массив" разом.
0
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 59
27.04.2014, 02:59 10
C++ Скопировано
1
2
3
4
5
6
7
8
void send_new_object(char *g, char *h, int j)
    {
         char name_nach_punkta[strlen(g) + 1];
        strcpy(name_nach_punkta, g);
        char name_kon_punkta[strlen(h) + 1];
        strcpy(name_kon_punkta, h);
        nomer_marshrouta = j;
    }
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.04.2014, 11:38 11
Цитата Сообщение от konstantin vl Посмотреть сообщение
C++ Скопировано
1
2
3
4
char name_nach_punkta[strlen(g) + 1];
...
char name_kon_punkta[strlen(h) + 1];
...
Смысл объявления локальных массивов?
0
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 59
27.04.2014, 22:58 12
Ты в аргументе передаешь целый массив, а указатель не указывает на целый массив он указывает только на первый элемент.
C++ Скопировано
1
2
char name_nach_punkta = *g;
        char name_kon_punkta = *h;  // здесь ты присваиваешь первый элемент.
0
1 / 1 / 0
Регистрация: 27.04.2014
Сообщений: 19
27.04.2014, 23:38 13
Добавлено через 4 минуты
C++ Скопировано
1
2
3
4
5
6
    void send_new_object(char *g, char *h, int j)
    {
        char name_nach_punkta = *g;
        char name_kon_punkta = *h;
        nomer_marshrouta = j;
    }
Здесь вы пытаетесь присвоить char name_nach_punkta содержимое первого элемента из указателя g и так же с char name_kon_punkta = *h;

Добавлено через 5 минут
Как же объяснить.... Когда вы пишите название массива ( massive_name ), программа воспринимает его как адрес первого элемента массива в оперативной памяти, а когда рядом указываете номер элемента( massive_name[number_of_element] ) переходит относительно этого адреса на number_of_element шагов.

Добавлено через 3 минуты
следовательно, принимающая ф-ция должна записать в указатель адрес первого элемента массива и относительно этого указателя вызывать элементы(как я описал в своем примере кусков кода). Извините если где-то ошибся, но вроде все правильно.

Добавлено через 8 минут
Вот полный рабочий пример написал.
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
using namespace std;
 
void func(char * mass, int n){
    for(int i=0;i<n;i++){
        cout<<mass[i];
    }
}
 
int main(){
    char massive[64]="Example";
    func(massive,64);
    system("pause");
    return 0;
}
Добавлено через 2 минуты
А вот если надо передать один конкретный знак:

C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
using namespace std;
 
void func(char char1){
    cout<<char1;
}
 
int main(){
    char massive[64]="Example";
    func(massive[0]);
    system("pause");
    return 0;
}
0
1 / 1 / 0
Регистрация: 10.03.2013
Сообщений: 59
28.04.2014, 02:03 14
alsav22, а вдруг его функция изменит исходное значение а он этого не хочет, можно конечно поставить const прочесть весь массив через указатель до \0 , но лучше все же сначала объяснить автору как это работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.04.2014, 02:03
Помогаю со студенческими работами здесь

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

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

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

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

Передача char* из функции
Здравствуйте! Функция считывает из Settings.ini данные. Из файла данные считываются правильно! Но далее, в main я не могу правильно...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Лучшие практики оптимизации Docker Image
Mr. Docker 13.03.2025
Размер Docker-образа влияет на множество аспектов работы с контейнерами. Чем больше образ, тем дольше его загрузка в реестр и выгрузка из него. Для команд разработки, работающих с CI/ CD пайплайнами,. . .
Вопросы на собеседовании по Docker
Mr. Docker 13.03.2025
Ты сидишь напротив технического специалиста, и вдруг звучит вопрос про Docker Swarm или многоэтапные сборки. Пот на лбу? Не переживай, после этой статьи ты будешь готов ко всему! Эта статья будет. . .
Поиск текста в сносках : замена дефиса на тире или тире на дефис...
РоΜа 13.03.2025
Нужно было найти текст в сносках и заменить. Почему-то метод селекшн не сработал. . . пришлось гуглить. найденный на форумвба код пришлось править. Смысл - заменяет в сносках дефисы и тире на нужные. . . .
Real PATH definitions in bash scripts
jigi33 13.03.2025
Как поймать путь и путь к директории относительно запускаемого файла в BASH 1. поймать путь через вывод $(pwd) 2. более правильно - на основе realpath (см. скриншот)
Django или Flask: что выбрать для веб-разработки на Python
py-thonny 13.03.2025
Django – это высокоуровневый фреймворк, который придерживается философии "всё включено". Он предоставляет разработчику готовые решения для большинства типичных задач веб-разработки: от аутентификации. . .
Непрерывное развертывание в Java с Kubernetes
Javaican 13.03.2025
Чем так привлекателен Kubernetes для развертывания Java-приложений? Этот оркестратор контейнеров позволяет автоматизировать развертывание, масштабирование и управление контейнеризированными. . .
Предотвращение XSS, CSRF и SQL-инъекций в JavaScript
run.dev 13.03.2025
JavaScript занимает первые позиции среди языков веб-разработки, но его распространенность делает его привлекательной целью для злоумышленников. Межсайтовый скриптинг (XSS), межсайтовая подделка. . .
PHP 8: JIT-компиляция и улучшение производительно­сти
Jason-Webb 13.03.2025
PHP никогда не славился своей скоростью. Многие сталкивались с проблемами производительности при работе со сложными вычислениями или обработкой больших объемов данных. Традиционная модель выполнения. . .
Сериализация данных с Apache Avro в Kafka
Javaican 12.03.2025
Apache Kafka стала одним из ключевых решений для работы с большими потоками данных. Однако с ростом объемов передаваемых данных возникает проблема: как эффективно сериализовать и десериализовать. . .
Создание потребителей Kafka с помощью Reactor Kafka
Javaican 12.03.2025
Reactor Kafka — это библиотека, объединяющая Apache Kafka с реактивным программированием на базе Project Reactor. Такое сочетание позволяет строить неблокирующие, асинхронные приложения с контролем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер