С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,196
#1

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

25.08.2013, 17:01. Просмотров 1080. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос strstr из библиотеки cstring, как должно функционировать? (C++):

Использование стандартной библиотеки cstring - C++
Добрый день. Столкнулся с маленькой проблемой хочу понять более подробные возможности С++. Задача: Напишите программу , которая просит...

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

Как использовать функции string::find или функция strstr(str1 ,str2) - C++
как использовать функции string::find или функция strstr(str1 ,str2) Добавлено через 3 минуты вернее какой у них синтаксис привдети...

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

Как CString преобразовать к нормальной строке? - C++
// ... CRecordset *m_rs; // ... LVITEM lvi; // ... СString s; m_rs-&gt;GetFieldValue(j, s); lvi.pszText = ?;Тип lvi.pszText -...

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

23
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
25.08.2013, 17:07 #2
C++
1
2
3
4
5
#include <iostream>
 
int main() {
    std::cout << (char*)NULL ;
}
Так понятнее?
1
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,196
25.08.2013, 17:20  [ТС] #3
Croessmah, к сожалению нет, уже несколько часов переписываю эти функции из библиотек и делаю программы дабы проверить,мозг закипает, можно поподробнее?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
25.08.2013, 17:31 #4
Из стандарта:
strstr из библиотеки cstring, как должно функционировать?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6519 / 3156 / 309
Регистрация: 04.12.2011
Сообщений: 8,726
Записей в блоге: 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";

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

Цитата Сообщение от IGPIGP Посмотреть сообщение
Нулевой указатель это же непечатное.
т.е. нулевой указатель нельзя напечатать и именно по этому у меня ошибка ?
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 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
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,196
25.08.2013, 19:01  [ТС] #10
Jupiter, не операторы а функции, как я уже написал выше, уже который час переписываю это все, голова кипит.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 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, это непечатно. Оно не только не выводится, но и выводит сам оператор.

0
Croessmah
26.08.2013, 04:08
  #13

Не по теме:

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

0
IGPIGP
26.08.2013, 04:18
  #14

Не по теме:

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

0
VLK
194 / 163 / 12
Регистрация: 05.05.2013
Сообщений: 1,196
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
26.08.2013, 12:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2013, 12:08
Привет! Вот еще темы с ответами:

Как из CString получить int ... заранее спасибо!! - C++
Проблемка ... Как из CString получить int.... только плиз не советуйте куда заглядывать в MSDN у меня его нету.... СПАСИБО....

Как перевести CString -ское число в Int? - C++
Есть CString -ское число. Как перевести это число в int??? Вот: { m_cap = m_cap + '1'; m_cap = c; int c = attol(m_cap); c =...

CString::Format() и преобразование double в CString - Visual C++
Вот фрагмент программы: void CMy6_1Dlg::OnRadio3() { CString s; int i=m_list1.GetCount(); int a; int k=0; float...

Как должна быть организована сеть офиса? Что должно быть настроено обязательно, а чего быть не должно? - Сети
Добрый день. Сразу оговорюсь, что я инженер-строитель и настройкой сети занимаюсь только потому, что больше некому. Поэтому некоторые,...


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

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

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