Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/30: Рейтинг темы: голосов - 30, средняя оценка - 4.97
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502

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

13.10.2014, 22:22. Показов 6955. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть функция :
C++
1
char f1(const char *str);
Мне нужно её вызвать .
Делаю так:

C++
1
2
3
    char s[5];
    s="abcd";  // ошибка: invalid array assignment    
   f1(s);
Что не так ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.10.2014, 22:22
Ответы с готовыми решениями:

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

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

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

31
 Аватар для DimanRu
721 / 712 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
13.10.2014, 22:34
Длина массива 5, а символов пишите 4.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
13.10.2014, 22:37
А по-моему как раз 5 Да и если бы 4, это большой криминал?
0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
13.10.2014, 22:44
Цитата Сообщение от NNN7 Посмотреть сообщение
s="abcd"; *// ошибка: invalid array assignment
s = "abcd" + 0x0;
0
9 / 9 / 10
Регистрация: 05.09.2013
Сообщений: 502
13.10.2014, 22:47  [ТС]
Если написать 4 , то выдаёт ошибку
incompatible types in assignment of 'const char [5]' to 'char [4]'

Добавлено через 1 минуту
Что это после плюса? )
и ругается :
incompatible types in assignment of 'const char*' to 'char [5]'
0
209 / 183 / 114
Регистрация: 15.03.2014
Сообщений: 398
13.10.2014, 22:52
NNN7, массивы не поддерживают оператор присваивания. Об этом компилятор как раз и сообщил.
Для Вашего случая можно воспользоваться функцией strncpy().
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main() {
 
    char resultStr[ 5 ];
    char tempStr[] = "abcd";
 
    strncpy( resultStr, tempStr , sizeof( resultStr ) - 1 );
    resultStr[ sizeof( resultStr ) - 1 ] = '\0';
 
    cout << resultStr << endl;
 
    return 0;
}
В Вашей программе нет возможности использовать переменные типа string ?
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
13.10.2014, 23:01
BlackSpace, не надо стринги, достаточно, как вы уже заметили, в адрес указателя массив не пытаться записать...
0
209 / 183 / 114
Регистрация: 15.03.2014
Сообщений: 398
13.10.2014, 23:10
_Ivana, тип string ведь гораздо проще в использовании.
Мое мнение такое - если используется C++, то при работе со строками использовать типы string, wstring.
А строки в стиле C использовать только в тех ситуациях, когда это действительно необходимо, исходя из неких требований к разрабатываемому приложению.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
13.10.2014, 23:16
BlackSpace, проще, не спорю. Но использовать стринги, векторы, списки и прочие шаблонные контейнеры имхо надо после того, как освоил простые одножо...е сишные строки и указатели

А вообще я просто сам лохЪ и С++/STL не знаю, вот и выпендриваюсь по поводу и без
0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
13.10.2014, 23:24
Цитата Сообщение от BlackSpace Посмотреть сообщение
массивы не поддерживают оператор присваивания
Блин, просотрел то, что char Объявлен как тип, а не как указатель *char. Просто уже отвык от таких детских конструкций.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
13.10.2014, 23:24
ЗЫ вот, кстати, как раз по теме только что нарисовался живой пример - Программирование с использованием строковых данных
Его наверное проще делать через стринги и библиотечные функции. А мне привычнее по-старинке указателями на коленке... Но конечно это не оправдание незнанию STL, если делать на С++ и на компе а не на С и на МК
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.10.2014, 23:28
Цитата Сообщение от NNN7 Посмотреть сообщение
Что не так ?
C++
1
2
    char s[5] = "abcd";
    f1(s);
1
 Аватар для D_in_practice
343 / 343 / 331
Регистрация: 02.10.2014
Сообщений: 666
13.10.2014, 23:31
Цитата Сообщение от NNN7 Посмотреть сообщение
Мне нужно её вызвать .
Делаю так:
C++
1
2
3
char s[5];
s="abcd";  // îøèáêà: invalid array assignment  
f1(s);
Что не так ?
Самому интересно, тк только начал изучать, меня устроил следующий вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
void f1(char*);
 
int main(){
    
    char s[] = "abcd";//то есть при объявлении все ок   
    f1(s);  
    std::cin >> s;//и тут можно что угодно делать   
    f1(s);
    
    return 0;
}
 
void f1(char* s){
    std::cout << s << std::endl;
    
}
0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
14.10.2014, 00:17
Цитата Сообщение от D_in_practice Посмотреть сообщение
и тут можно что угодно делать
Не всё. По умолчанию, конструктором выделяется память в 80 байт.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2014, 00:21
Каким конструктором?
0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
14.10.2014, 00:25
Цитата Сообщение от alsav22 Посмотреть сообщение
Каким конструктором?
Оооо, это патология. Конструктором класа char. Он встроенный, поэтому объявлен по-умолчанию, но он есть, не сомневайтесь.
Мамма-мия, как всё запущено...
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
14.10.2014, 00:30
Ну, тогда покажите, как он работает. Что он не позволит сделать? Продемонстрируйте кодом.
0
14.10.2014, 00:30

Не по теме:

Цитата Сообщение от SmittWesson Посмотреть сообщение
Конструктором класа char
:yahoo:
или ты снова постебаться решил???

0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
14.10.2014, 06:41
Цитата Сообщение от alsav22 Посмотреть сообщение
Ну, тогда покажите, как он работает. Что он не позволит сделать? Продемонстрируйте кодом.
char a;// переменная = 1 байту.
char a[10];// массив из 10-и байт.
char *a;// Указатель на массив из 80 байт, выделенных по умолчанию.
Чем он занимается? Да ничем, кроме вышеописанного. Это рудинимент С. Он даже не проверяет выход указателя за границы диапазона. Если в *а записать больше 80-и байт, есть вероятность того, что данные затрут другую прогу, находящуюся в другом сегменте памяти.

Цитата Сообщение от Jewbacabra Посмотреть сообщение
или ты снова постебаться решил???
Да, называй это хоть горшком, суть не изменится .
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,649
Записей в блоге: 6
14.10.2014, 10:58
Цитата Сообщение от NNN7 Посмотреть сообщение
Что не так ?
А вы подумайте, что вы делаете. Вы присваиваете переменной типа char[] переменную типа const char[]. Естесственно компилятору это не понравится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2014, 10:58
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru