Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
1

strstr из библиотеки cstring, как должно функционировать?

25.08.2013, 17:01. Просмотров 1170. Ответов 23
Метки нет (Все метки)

Вот у меня есть описание, переписано из книги:

char *strstr(const char *Str1, const char *Str2) - находит первое вхождение в строку Str1 строки Str2. Если строка Str2 найдена, возвращает указатель на нее в строке Str1. В противном случае возвращает нулевой указатель (NULL).

Вот программа:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream> 
using std::cin;
using std::cout;
using std::endl;
 
#include <string>
 
 
int main()
{
char *Str1 = "Hello world, good day!"; 
char *Str2 = "w0rld"; 
 
cout << strstr(Str1, Str2) << endl; 
 
system("pause");
return 0;
}
В слове world мы заменили "o" на "0" (ноль), вроде как слово не найдено, значит возвращаем NULL, программа запускается но выкидывает ошибку, в чем косяк?

Вот ошибка:
strstr из библиотеки cstring, как должно функционировать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2013, 17:01
Ответы с готовыми решениями:

Использование стандартной библиотеки cstring
Добрый день. Столкнулся с маленькой проблемой хочу понять более подробные...

Почему у меня для использования функций cstring не нужно включать прототип библиотеки
Я недавно начал осваивать с++ с помощью учебника и там по ходу главы создается...

Как использовать функции string::find или функция strstr(str1 ,str2)
как использовать функции string::find или функция strstr(str1 ,str2) ...

Как включить библиотеки в исполняемый файл, чтобы не приходилось ставить библиотеки (Eclipse)
Как включить библиотеки в конечный EXE как это сделано в bilder, чтобы не...

Как CString преобразовать к нормальной строке?
// ... CRecordset *m_rs; // ... LVITEM lvi; // ... СString s;...

23
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,583
Записей в блоге: 2
Завершенные тесты: 1
25.08.2013, 17:07 2
C++
1
2
3
4
5
#include <iostream>
 
int main() {
    std::cout << (char*)NULL ;
}
Так понятнее?
1
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
25.08.2013, 17:20  [ТС] 3
Croessmah, к сожалению нет, уже несколько часов переписываю эти функции из библиотек и делаю программы дабы проверить,мозг закипает, можно поподробнее?
0
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,583
Записей в блоге: 2
Завершенные тесты: 1
25.08.2013, 17:31 4
Из стандарта:
strstr из библиотеки cstring, как должно функционировать?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7059 / 3362 / 455
Регистрация: 04.12.2011
Сообщений: 9,350
Записей в блоге: 5
25.08.2013, 18:47 5
Цитата Сообщение от VLK Посмотреть сообщение
C++
1
2
3
char *Str1 = "Hello world, good day!"; 
char *Str2 = "w0rld";
 cout << strstr(Str1, Str2) << endl;
Попробуйте так:
C++
1
2
3
4
5
6
7
char *Str1 = "Hello world, good day!"; 
char *Str2 = "w0rld";
char *foundStr=NULL;
foundStr = strstr(Str1, Str2);
if(foundStr  != NULL) cout << foundStr  << endl;
else
cout << "Word "<< Str2  <<" is not found at string "<< Str1 <<endl;
Нулевой указатель это же непечатное.
1
Jupiter
25.08.2013, 18:51
  #6

Не по теме:

Цитата Сообщение от VLK Посмотреть сообщение
C++
1
2
char *Str1 = "Hello world, good day!"; 
char *Str2 = "w0rld";
C++
1
2
const char* Str1 = "Hello world, good day!"; 
const char* Str2 = "w0rld";
:rtfm:

1
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
25.08.2013, 18:56  [ТС] 7
вообщем то я так понял все эти операторы предназначены для использования в условиях if, а точнее только там они работают полноценно.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Нулевой указатель это же непечатное.
т.е. нулевой указатель нельзя напечатать и именно по этому у меня ошибка ?
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.08.2013, 18:59 8
Цитата Сообщение от VLK Посмотреть сообщение
вообщем то я так понял все эти операторы
какие операторы?

Цитата Сообщение от VLK Посмотреть сообщение
все эти операторы предназначены для использования в условиях if, а точнее только там они работают полноценно.
что-что? машина дура и делает то что ты пишешь

Цитата Сообщение от VLK Посмотреть сообщение
т.е. нулевой указатель нельзя напечатать и именно по этому у меня ошибка ?
да
1
IGPIGP
25.08.2013, 19:01
  #9

Не по теме:

Цитата Сообщение от VLK Посмотреть сообщение
т.е. нулевой указатель нельзя напечатать и именно по этому у меня ошибка ?
Да всё оно тут так. Или ноль или единица, в конечном счёте. Третьего не дано. :)
Главное понять, как работает та или иная функция... или свою написать (шучу))

1
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
25.08.2013, 19:01  [ТС] 10
Jupiter, не операторы а функции, как я уже написал выше, уже который час переписываю это все, голова кипит.
0
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,583
Записей в блоге: 2
Завершенные тесты: 1
26.08.2013, 00:32 11
Цитата Сообщение от VLK Посмотреть сообщение
т.е. нулевой указатель нельзя напечатать и именно по этому у меня ошибка ?
Вы смотрели на пост #4, где я привел фрагмент из стандарта?
Там же ясно написано, что указатель не должен быть равен нулю

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Нулевой указатель это же непечатное.
Символы '\a' и '\0' тоже по сути не печатные

0
IGPIGP
26.08.2013, 03:26
  #12

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Символы '\a' и '\0' тоже по сути не печатные
Не-а! Они не печатаются, а нулевой указатель, это непечатное, то есть неприличное с точки зрения оператора <<
так как для указателей на char он ведёт себя очень нервно. Сразу пытается разыменовать и вывести. Помнишь, мы как-то спорили. Я до сих пор считаю, что нулевой указатель на char, это непечатно. Оно не только не выводится, но и выводит сам оператор. 8-)

0
Croessmah
26.08.2013, 04:08
  #13

Не по теме:

IGPIGP, ну так в стандарте же написано, что нулевой указатель на тип char - это кака для этого оператора :D

0
IGPIGP
26.08.2013, 04:18
  #14

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
IGPIGP, ну так в стандарте же написано, что нулевой указатель на тип char - это кака для этого оператора
Очень мудрый документ! Страуструп руководил разработкой.:yes: А указатель и не по стандарту, а и по фейсу видно. Тем паче если ноль, то и подавно непечатный. Совершенно страуСИный. :)

0
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
26.08.2013, 12:08  [ТС] 15
Цитата Сообщение от Croessmah Посмотреть сообщение
Вы смотрели на пост #4, где я привел фрагмент из стандарта?
Там же ясно написано, что указатель не должен быть равен нулю
да, видел набор иноземных слов, для меня с не совсем понятным смыслом.

Если указатель не должен быть равен нулю, почему тогда вот это работает:

C++
1
2
3
4
5
6
char *Str1 = "Hello world, good day!"; 
char *Str2 = "w0rld"; 
 
char *d = strstr(Str1, Str2); 
 
char *V = NULL;
может все же правильнее можно сказать что нельзя напечатать указатель на 0 ?
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.08.2013, 12:16 16
Цитата Сообщение от VLK Посмотреть сообщение
да, видел набор иноземных слов
даже гугл транслейт их правильно переведет

Цитата Сообщение от VLK Посмотреть сообщение
может все же правильнее можно сказать что нельзя напечатать указатель на 0 ?
да. сколько ж можно то

Добавлено через 5 минут
так даже ещё точнее
Цитата Сообщение от VLK Посмотреть сообщение
правильнее можно сказать что нельзя напечатать указатель char равный 0
1
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,583
Записей в блоге: 2
Завершенные тесты: 1
26.08.2013, 12:21 17
Цитата Сообщение от VLK Посмотреть сообщение
Если указатель не должен быть равен нулю, почему тогда вот это работает:
И что здесь может не сработать?
Сказано же, что нельзя передавать указатель на char равный нулю в функцию operator<<

Добавлено через 18 секунд

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
даже гугл транслейт их правильно переведет
Этот может :D

2
VLK
195 / 164 / 19
Регистрация: 05.05.2013
Сообщений: 1,199
26.08.2013, 12:30  [ТС] 18
Croessmah, вами было так много сказано в этой теме, какие то скриншоты, сколько энергии было потрачено, столько символов было напечатано, неужели нельзя было еще в первом сообщении написать это волшебное предложение:

Цитата Сообщение от Croessmah Посмотреть сообщение
нельзя передавать указатель на char равный нулю в функцию operator<<
это же куда проще, чем кидать какие то необработанные куски и намеки, потом спорить ну и т.д.
0
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,583
Записей в блоге: 2
Завершенные тесты: 1
26.08.2013, 12:34 19
Цитата Сообщение от VLK Посмотреть сообщение
написать это волшебное предложение:
В посте #4 это даже красным подчеркнуто!!!
Цитата Сообщение от Jupiter Посмотреть сообщение
даже гугл транслейт их правильно переведет
В посте #11 жирным выделено

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от VLK Посмотреть сообщение
сколько энергии было потрачено
0.00000001%?



Добавлено через 35 секунд
Цитата Сообщение от VLK Посмотреть сообщение
какие то скриншоты
На этом скриншоте все ответы. Стоить только посмотреть внимательнее
0
Jupiter
26.08.2013, 12:34     strstr из библиотеки cstring, как должно функционировать?
  #20

Не по теме:

VLK, вам срочно нужно решать задачи на логику и на внимательность

1
26.08.2013, 12:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2013, 12:34
Привет! Вот еще темы с ответами:

string и cstring. Как это устроено?
Здравствуйте. Изучаю азы С++. В процессе возникло несколько вопросов. Вопросы...

Как перевести CString -ское число в Int?
Есть CString -ское число. Как перевести это число в int??? Вот: { m_cap =...

Как из CString получить int ... заранее спасибо!!
Проблемка ... Как из CString получить int.... только плиз не советуйте куда...


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

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

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