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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.94
Zain
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 12
29.05.2010, 04:48     Передача стринга в функцию #1
Всем привет!
Вот возникла такая проблемка: стринг не передается в функцию, Борланд выдает ошибку. Я в си ++ новичок, но думаю, видимо ошибка в самой функции, и скорее всего связана она с длиной строки, только я не знаю как это исправить:
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);
Благодарю за помощь и понимание=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2010, 04:48     Передача стринга в функцию
Посмотрите здесь:

передача в функцию C++
C++ вывод константного стринга..срочно
C++ С++ изменение регистра стринга
C++ Передача матрицы в функцию
Передача двухмерного массива из функцию в функцию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.05.2010, 07:36     Передача стринга в функцию #2
классы лучше передавать по ссылке, а не указателю
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;
}
Zain
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 12
29.05.2010, 11:02  [ТС]     Передача стринга в функцию #4
Sorry за дотошность, но я не понял, как это будет работать...
Мне нужно чтобы по заданному значению, в данном случае фамилии наити в дереве елемент и выписать все данные.
Zain
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 12
29.05.2010, 11:08  [ТС]     Передача стринга в функцию #5
А вот сама ошибка:
Миниатюры
Передача стринга в функцию  
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 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"));
}
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
29.05.2010, 11:18     Передача стринга в функцию #7
Цитата Сообщение от Zain Посмотреть сообщение
как это будет работать
что именно
Zain
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 12
29.05.2010, 11:19  [ТС]     Передача стринга в функцию #8
А что такое foo bar etc? Я новичок в C++, такого еще не встречал.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.05.2010, 11:20     Передача стринга в функцию #9
Добавлено через 1 минуту
Цитата Сообщение от Zain Посмотреть сообщение
А что такое foo bar etc? Я новичок в C++, такого еще не встречал.
это просто пример на тему "почему в таких задачах лучше передача по ссылке, а не указателю"
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
29.05.2010, 11:22     Передача стринга в функцию #10
Цитата Сообщение от fasked Посмотреть сообщение
Ошибка.
К чему все эти танцы, если вот так ошибки не будет:
и какое отношение это всё имеет к утверждению "классы лучше передавать по ссылке, а не указателю"?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.05.2010, 11:28     Передача стринга в функцию #11
В проверке указателя на NULL поставьте вместо логического и (&&) логическое или (||)

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

Не по теме:

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

fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 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))
Zain
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 12
29.05.2010, 11:37  [ТС]     Передача стринга в функцию #14
Цитата Сообщение от fasked Посмотреть сообщение
В проверке указателя на NULL поставьте вместо логического и (&&) логическое или (||)

[size="1"][color="grey"]
Заменил, работает только не так как нужно: когда заменил проверку на НУЛЛ и в проверку в рекурсии
то в находит только первый елемент, а когда заменил проверку на НУЛЛ на ||
а проверку в рекурсии оставил && то находит каждый елемент, но в конце выдает ту же ошибку...
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)
    {
        ....
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.05.2010, 11:43     Передача стринга в функцию #16
Цитата Сообщение от Zain Посмотреть сообщение
Заменил, работает только не так как нужно: когда заменил проверку на НУЛЛ и в проверку в рекурсии
то в находит только первый елемент, а когда заменил проверку на НУЛЛ на ||
а проверку в рекурсии оставил && то находит каждый елемент, но в конце выдает ту же ошибку...
прочитал твой код и ужаснулся xD

в первом условии ты делаешь проверку на NULL и если true, то пытаешься вывести информацию из указателю. Нельзя обращаться к области памяти по адресу NULL!
Судя по всему тебе надо делать проверку на неравенство нулю
C++
1
if(wezel != NULL && (*str == wezel->nazwa))
Далее тоже самое:
C++
1
if(wezel != NULL && *str != wezel->nazwa)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2010, 12:16     Передача стринга в функцию
Еще ссылки по теме:

C++ Передача в функцию
Передача в функцию C++
C++ Передача объекта в функцию или функцию друга

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

Или воспользуйтесь поиском по форуму:
Zain
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 12
29.05.2010, 12:16  [ТС]     Передача стринга в функцию #17
fasked !!!
Спасибо Большое , заработало, только я исправил еще одну ошибку, надо было проверять не
C++
1
wezel != NULL
а
C++
1
wezel -> right != NULL
Спасибо всем!!!
Yandex
Объявления
29.05.2010, 12:16     Передача стринга в функцию
Ответ Создать тему
Опции темы

Текущее время: 16:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru