Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.94
Zain
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 12
#1

Передача стринга в функцию - C++

29.05.2010, 04:48. Просмотров 4655. Ответов 16
Метки нет (Все метки)

Всем привет!
Вот возникла такая проблемка: стринг не передается в функцию, Борланд выдает ошибку. Я в си ++ новичок, но думаю, видимо ошибка в самой функции, и скорее всего связана она с длиной строки, только я не знаю как это исправить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void search_prkl(prkl *wezel, string *str)
{  if(wezel==NULL && (*str == wezel->nazwa)){
        cout << "etap 1";getch();
 
 
        cout <<endl<<endl<<wezel->id << "  "<< wezel->nazwa <<endl;
        cout << "E-mail\t"<< wezel->mail <<"\nTelefon\t"<<wezel->telefon << endl<<"Stanowisko:  "<<wezel->stadr;
        cout <<"\nNR konta\t"<<wezel->konto<<endl<<endl;
}
if(wezel==NULL && *str != wezel->nazwa) cout << "\nNic nie znaleziono\n";
 
   else {
         search_prkl(wezel->right,str);
         }
 
  }
А вот фрагмент ее вызова в функции майн:
C++
1
2
3
4
5
tmp = new string;
                                      getline(cin,*tmp);
                                      cout << *tmp;getch();
 
                                      search_prkl(root,tmp);
Благодарю за помощь и понимание=)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2010, 04:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача стринга в функцию (C++):

Передача объекта в функцию или функцию друга - C++
Здравствуйте, уважаемые программисты :) К примеру есть такой код. #include &lt;iostream&gt; using namespace std; class My_Class1 { ...

Передача массива в функцию используя указатель на функцию - C++
У меня имеется готовая программа без передачи функции в функцию указателем, мне нужно передать функцию ввода масива в функцию его обработки...

Передача указателя на шаблонную функцию в другую функцию - C++
Пишу тест для нескольких улучшений квиксорта с измерением времени. Функция benchmark принимает итераторы для диапазона элементов, указатель...

Передача двухмерного массива из функцию в функцию - C++
Допустим у меня есть функция, в которой &quot;генерируется&quot; массив. Но нужно его передать в другую функцию, которая его выведет на экран. ...

вывод константного стринга..срочно - C++
детский глупый вопрос,почему то все равно туплю: cin&gt;&gt;&quot;W=false&quot;; binary '&gt;&gt;' : no operator found which takes a right-hand operand of...

Передача в функцию - C++
компилятор ругается на int sumcolumn (int **a, int n) sumcolumn(a,m) почему не могу передать массив i*1, таким образом? ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.05.2010, 07:36 #2
классы лучше передавать по ссылке, а не указателю
0
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
29.05.2010, 09:33 #3
Цитата Сообщение от fasked Посмотреть сообщение
классы лучше передавать по ссылке, а не указателю
почему?

Zain, на будущее - текст ошибки не помешал бы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void search_prkl(string *str)
{
    *str = "new string";
}
 
int main()
{
    string *tmp = new string();
    getline(cin, *tmp);
    cout << *tmp << endl;
    search_prkl(tmp);
    cout << *tmp;
 
    return 0;
}
0
Zain
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 12
29.05.2010, 11:02  [ТС] #4
Sorry за дотошность, но я не понял, как это будет работать...
Мне нужно чтобы по заданному значению, в данном случае фамилии наити в дереве елемент и выписать все данные.
0
Zain
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 12
29.05.2010, 11:08  [ТС] #5
А вот сама ошибка:
0
Миниатюры
Передача стринга в функцию  
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.05.2010, 11:15 #6
Цитата Сообщение от Roma_F Посмотреть сообщение
почему?
C++
1
2
3
4
5
6
7
8
9
10
11
int foo(const std::string * str) { 
   return 1;
}
 
void bar(int num) {
}
 
int main()
{
   bar(foo("qwerty"));
}
Ошибка.

К чему все эти танцы, если вот так ошибки не будет:
C++
1
2
3
4
5
6
7
8
9
10
11
int foo(const std::string & str) { 
   return 1;
}
 
void bar(int num) {
}
 
int main()
{
   bar(foo("qwerty"));
}
0
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
29.05.2010, 11:18 #7
Цитата Сообщение от Zain Посмотреть сообщение
как это будет работать
что именно
0
Zain
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 12
29.05.2010, 11:19  [ТС] #8
А что такое foo bar etc? Я новичок в C++, такого еще не встречал.
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.05.2010, 11:20 #9
Добавлено через 1 минуту
Цитата Сообщение от Zain Посмотреть сообщение
А что такое foo bar etc? Я новичок в C++, такого еще не встречал.
это просто пример на тему "почему в таких задачах лучше передача по ссылке, а не указателю"
0
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
29.05.2010, 11:22 #10
Цитата Сообщение от fasked Посмотреть сообщение
Ошибка.
К чему все эти танцы, если вот так ошибки не будет:
и какое отношение это всё имеет к утверждению "классы лучше передавать по ссылке, а не указателю"?
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.05.2010, 11:28 #11
В проверке указателя на NULL поставьте вместо логического и (&&) логическое или (||)

Добавлено через 5 минут
Цитата Сообщение от Roma_F Посмотреть сообщение
и какое отношение это всё имеет к утверждению "классы лучше передавать по ссылке, а не указателю"?
мне кажется прямое. как минимум по ссылке нельзя будет передать null.
1
Roma_F
29.05.2010, 11:31
  #12

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
как минимум по ссылке нельзя будет передать null.
это такая катастрофа?
по моему всё зависит от ситуации, поэтому я бы согласился с этим утверждением, если его немного переформулировать "string лучше передавать по ссылке, а не указателю"

0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.05.2010, 11:32 #13
Цитата Сообщение от fasked Посмотреть сообщение
В проверке указателя на NULL поставьте вместо логического и (&&) логическое или (||)
то есть судя по ошибке, которая у вас выскакивает происходит попытка чтения из нулевого адреса памяти. видимо указатель либо на строку, либо на структуру равен 0. то есть надо сделать проверку
и вместо:
C++
1
if(wezel==NULL && (*str == wezel->nazwa))
написать так:
C++
1
if(wezel==NULL || str == NULL ||  (*str == wezel->nazwa))
1
Zain
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 12
29.05.2010, 11:37  [ТС] #14
Цитата Сообщение от fasked Посмотреть сообщение
В проверке указателя на NULL поставьте вместо логического и (&&) логическое или (||)

[size="1"][color="grey"]
Заменил, работает только не так как нужно: когда заменил проверку на НУЛЛ и в проверку в рекурсии
то в находит только первый елемент, а когда заменил проверку на НУЛЛ на ||
а проверку в рекурсии оставил && то находит каждый елемент, но в конце выдает ту же ошибку...
0
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
29.05.2010, 11:40 #15
C++
1
2
3
4
if(wezel !=NULL && str != NULL)
    if (*str == wezel->nazwa)
    {
        ....
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2010, 11:40
Привет! Вот еще темы с ответами:

Передача в функцию - C++
вот есть такие строки кода: typedef vector&lt; vector&lt;char&gt; &gt; string_sound; void sound_func(string_sound &amp;text_sound, int sum_words)...

Передача массива в функцию - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;time.h&gt; using namespace std; void maxx(); int main(int argc, char *argv) ...

Передача данных в функцию - C++
Добрый день, форумчане! Интересует следующий странно глупый вопрос... Не могу понять! Вот никак. Есть фукция: int solve(int...

Передача файла в функцию - C++
Что я делаю не так: #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;map&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.05.2010, 11:40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru