Вернуть массив символов через return
Доброго времени суток. Я сделал массив объектов с помощью класса и нужно устроить поиск по имени. Мне надо перебрать все элементы массива циклом и в случае идентичности переменной key[30] с FullName[30] должен сработать cout. Однако как вернуть FullName и сравнить с key? Через strcmp у меня не получается. Помогите ,пожалуйста.
1 2 3 4 5 6 7
class phonebook { char FullName[30]; public: void initialization(); char get_fullname(); }
Код в файле cpp:
1 2 3 4 5 6 7 8 9 10 11 12
#include "fraction.h" void phonebook::initialization() { std::cin.ignore(); std::cout "Enter full name: "; std::cin.getline(FullName, 30); } char phonebook::get_fullname() { }
Основной файл:
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 #include "fraction.h" int main() { short size=0,position = 0,id; phonebook* peoples = new phonebook[size]; char decision = '9'; while (decision != 'E') { std::cout "Enter decision(C - create, S - search by full name): "; std::cin >> decision; switch (decision) { case 'C': peoples = (phonebook*)realloc(peoples, (++size) * sizeof(phonebook)); peoples[position++].initialization(); break; case 'S': char key[30],temp[30]; std::cout "Enter key: "; std::cin.getline(key, 30); for (short i = 0; i size; i++) { if (strcmp(!peoples[i].get_fullname(), key)==0) { // пытаюсь сделать подобие сравнения. std::cout "!"; } } break; } } delete[] peoples; return 0; }
Добавлено через 6 минут
Знак ! в проверке лишний, его надо убрать.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как вернуть только верхнее значение стека через return
Есть рекурсивная функция, которая возвращает определенное значение. Вопрос — как вернуть только.
Вернуть из функции массив символов
Здравствуйте! Не получается никак решить задачу. Напишите функцию merge, которая соединяет две.
Как из функции вернуть массив символов?
Здравствуйте.Как возвратить массив символов?Читал другие темы,понял что надо создавать динамическую.
Как вернуть два значения через return?
Вот пример. Мне нужно с помощью функции zero записать в х0=0 , а в х1=1. вооооот, вообщем я хз.
1370 / 593 / 199
Регистрация: 02.08.2011
Сообщений: 2,882

Сообщение было отмечено d8veloper как решение
Решение
Надо возвращать указатель.
char* get_fullname();
А ты возвращаешь 1 символ вместо массива.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Можно ли через метод типа int вернуть 2 значения (return)?
Вообщем возникла такая проблема. Создал 2 метода для решения дискриминантного уравнения. Один метод.
Можно ли выводить целый массив из метода через return
В чем проблема? Можно ли выводить целый массив из метода через return?
Не могу через указатель на двумерный массив вернуть все значения в другой массив
Не могу через указатель на двумерный массив вернуть все значения в другой массив возвращается.
Вернуть QString с помощью return
Добрый день . Есть переменная типа string ,как с помощью return вернуть ее туда,откуда вызвалась.

Как из switch вернуть результат return?
Код public string Method1(string str_1) < string s1; .
return как вернуть значение из фукнции?
Всем привет! Есть функция: public void login(string login,string password) < //Здесь идет.
Как вернуть массив char из функции c
Написал функцию перевода из int в char, но есть одна проблема.
Вот функция:
char IntToStr( int Value )
Необходимо вернуть массив символов char[].
char[] IntToStr( int Value ) — выдает ошибку.
указатель тоже нельзя возвращать — возвращаем адрес локальной переменной..
конечно есть вариант передавать в качестве второго аргумента указатель на буффер, куда засунуть результат, но это сделаю второй перегружаемой функцией, нужна именно такая которая вернет результат =)
Регистрация: 08.01.2009
Сообщений: 9
А как насчет:
char * intToStr(int val)
Тут конечно есть проблема в том, что asprintf алокирует память и после использования ее надо освободить. Статический массив объявить внутри функции нельзя, так как переменная помрет на выходе из функции. ИМХО, другого решения я не нахожу (для С), если ты пишешь на С++ то тогда лучше работать со std::string и тогда утечки памяти можно уверено избежать.
#define BUF (32) std::string intToStr(int val)
| v_root_mne_logi |
| Посмотреть профиль |
| Найти ещё сообщения от v_root_mne_logi |
Регистрация: 08.01.2009
Сообщений: 9
вот сегодня пришло в голову, что возможно, если объявить внутри функции
static char arr[CONST], то мне кажется, что отработает как надо.
Правда не проверял, нет пока возможности.
Естесственно, что функция возвращает char *, а не просто char
| v_root_mne_logi |
| Посмотреть профиль |
| Найти ещё сообщения от v_root_mne_logi |
Форумчанин
Регистрация: 17.11.2008
Сообщений: 233
Создавай Чар* динамически
char* IntToStr(int n) < int SIZE=. ;//Сдесь можешь делить на 10, пока не получишь 0 и использовать счетчик; char* str = new char[SIZE+1]; //для '\0' . //присвоения и т.п. return str; >
А в main() удаляй
int main() < char* myStr; int n=333; myStr=IntToStr(n); . //делай что тебе надо if(myStr)delete [] myStr; >
P.S. что то типо этого. код не проверял, писал сразу. Так что может и не работать!
| Похожие темы | ||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Ошибка cannot convert from ‘char *’ to ‘char [100]’ | Stellvertreter | Общие вопросы C/C++ | 5 | 30.05.2010 00:02 |
| Возвращение стража. | Манжосов Денис 🙂 | Софт | 0 | 18.09.2008 22:57 |
| Есть таблица — В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql | Muahahaha | PHP | 8 | 27.03.2008 11:17 |
| переписать из массива в линейный двунаправленный список чётные элементы массива | Black_Ak24 | Помощь студентам | 12 | 08.01.2008 00:44 |
Как вернуть массив char из функции c
Мне нужно из DLL вернуть массив объектов в виде
struct < unsigned int objCount; myObject** objects >
Все бы хорошо, да тольок память под массив я выделяю в DLL, а освобождать получается надо в программе — а это плохо.
Как поступают в таких случаях?
Re: Подскажите как вернуть массив объектов из DLL
| От: | Аноним |
| Дата: | 14.03.05 07:12 |
| Оценка: |
Здравствуйте, Аноним, Вы писали:
А>Все бы хорошо, да тольок память под массив я выделяю в DLL, а освобождать получается надо в программе — а это плохо.
Эт-точно, не хорошо оно.
Вариант 1, простейший. Передавать уже предвыделенный массив определённого (предположительно достаточного) размера. Тупо, ненадёжно, но так часто делают, когда известно ограничение сверху на размер массива и оно не очень велико (например,GetCurrentDirectory заполняет массив символов и требует, чтоб там было место для MAX_PATH элементов).
Вариант 2, извратный. objCount делаешь in/out параметром, на входе — сколько уже ты выделил, на выходе — сколько ему реально надо. Соответственно, делаешь два вызова: сначала objCount = 0, получаешь нужный размер, выделяешь память, делаешь реальный вызов. Разновидность варианта — делать особую функцию для возврата кол-ва элементов. Ограничение — надо быть уверенным, что между двумя вызовами кол-во не изменится.
Вариант 3. Передаёшь callback-функцию для выделения памяти, dll’ка ей пользуется.
Вариант 4. Если память выделяется и освобождается ч/з new/delete, если crt майкрософтовская и линкована динамически, то можно звать new в одном модуле, а delete в другом.
Re: Подскажите как вернуть массив объектов из DLL
| От: | tarkil | http://5209.copi.ru/ |
| Дата: | 14.03.05 07:15 | |
| Оценка: | 7 (1) +1 | |
Как вернуть массив char из функции c
Начал изучать массивы и указатели в C, и не могу решить проблему, суть которой в том, что функция должна возвращать массив, и она его возвращает, но не в том виде, в котором нужно. Ниже — код и вывод программы
#include int * initArray() < int resultArray[5]; int i; time_t t; for (i = 0; iprintf ("From Init %d\t", resultArray[i]); printf ("\n"); > //Вернется УКАЗАТЕЛЬ НА ПЕРВЫЙ ЭЛЕМЕНТ resultArray[0] return &resultArray; > void outArray (int *out) < int curIndex; for (curIndex = 0; curIndex < 5; curIndex++ ) < printf ("%d\t", (*out) + curIndex ); >> void main (void) < array[5] = initArray(); printf("Первый элемент = %d\n", *array ); printf ("Массив ["); //array - это указатель на первый элемент массива outArray(array); printf ("]\n"); >
From Init 8 From Init 6 From Init 8 From Init 2 From Init 0 From Init 0 Первый элемент = -1218272211 Массив [-1218272211 -1218272210 -1218272209 -1218272208 -1218272207 ]
Вобщем немного запутался с указателями. Заранее спасибо за помощь.
Цифровой кот
Регистрация: 29.08.2014
Сообщений: 7,656
int resultArray[5]; — это статический массив из 5 элементов int. функция возвращает значение указателя на начало этого массива. но косяк в том, что resultArray – локальная переменная, после выхода из области видимости в этих 5 элементах может расположиться любой мусор, но указатель и теперь указывает правильный адрес – тот самый, который функция вернула наружу.
поэтому не надо так делать, это лишний головняк. передавай массивы в функции и из функций по ссылке. если необходимо вернуть новый указатель, выделяй память в функциях динамически и не забывай её возвращать системе обратно за пределами функций, выделяющих память.
з.ы. я художник, я так вижу!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана.
Белик Виталий 🙂
Регистрация: 23.07.2007
Сообщений: 57,792
Согласен. Нужно из кучи возвращать:
#include int * initArray(int n) < int *resultArray=malloc(n*sizeof(int)); int i; time_t t; for (i = 0; iprintf ("From Init %d\t", resultArray[i]); printf ("\n"); > return resultArray; > void outArray (int *out,int n) < int curIndex; for (curIndex = 0; curIndex < n; curIndex++ ) < printf ("%d\t", (*out) + curIndex ); >> void main (void) < int *array = initArray(5); printf("Первый элемент = %d\n", array[0] ); printf ("Массив ["); //array - это указатель на первый элемент массива outArray(array,5); free(array); // Или как там освобождать правильно? printf ("]\n"); >
I’m learning to live.
Форумчанин
Регистрация: 07.01.2014
Сообщений: 124
#include #include #include void initArray(int *array, int len) < int i; time_t t; for (i = 0; iprintf ("From Init %d\n", array[i]); > > void outArray (int *out, int len) < int i; for (i = 0; i < len; i++)< printf("\nArray[%d] = %d", i, out[i]); >> int main (void)< const int size = 5; int array[size]; initArray(array, size); printf("first element = %d\n", *array ); //array - это указатель на первый элемент массива outArray(array, size); return 0; >
#define TRUE FALSE //счастливой отладки
| Aleksander550 |
| Посмотреть профиль |
| Найти ещё сообщения от Aleksander550 |