Dlaczego to nie działa?

UWAGA! Ten wpis ma już 17 lat. Pewne stwierdzenia i poglądy w nim zawarte mogą być nieaktualne.

Czy ktoś może mi powiedzieć, dlaczego w poniższym kodzie podświetlony warunek nie wykonuje się? Chodzi mi o przypadek, gdy str2 nie zostanie znalezione w str1. Mimo tego, że według dokumentacji funkcja strstr() powinna zwracać NULL.

#include 
#include 

using namespace std;

int main()
{
char str1[80], str2[80];
char *ptr;

cout << "Wpisz tekst do przeszukania:";
cin >> str1;

cout << "Co mam wyszukac?";
cin >> str2;

ptr = strstr(str1, str2);
cout << "Znalazlem: " << '\'' << str1 << '\'' << " w ";
cout << '\'' << str2 << '\'' << '\n';
cout << ptr;
if(ptr==NULL) cout << "Nic z tego!"; // highlight
return 0;
}


12 komentarzy do “Dlaczego to nie działa?”

  1. Nie wiem o co Ci chodziło dokładnie, ale po przeróbce na coś takiego, działa:

    if(ptr)
    {
    cout << „Znalazlem: „ << ‘\’‘ << str1 << ‘\’‘ << „ w „;
    cout << ‘\’‘ << str2 << ‘\’‘ << ‘\n’;
    cout << ptr;
    }
    else cout << „Nic z tego!”; // highlight

  2. Po wyświetleniu ptr (cout << ptr) gdy ptr==NULL dalsza część wyjścia jest jakby ucinana.

    if(ptr==NULL) cout << „Nic z tego!”; // highlight
    cout << ptr;
    cout << ‘\n’;
    return 0;

    Powyższy kod nie wyśiwetli ‘\n’ gdy ptr==NULL. Gdy ptr!=NULL działa dobrze.

  3. @Splash, ale nie służy do rozwiązywania problemów.
    Gdyby każdy używał techbloga to pisania tam o swoich problemach technicznych, to sensowne wpisy zginęłby w gąszczu problemów.

  4. Ale spojrz na to z innej strony: rozwiązanie problemu w komentarzach wlasnie sprawi, ze wpis bedzie wartosciowy i przyda sie potomnym.

  5. pomijam to co pisali przedpiścy.

    skoro korzystasz z strstr, zakładam, że includujesz string.h (nie widzę w kodzie u góry).
    imho nie powinno się mieszać kodu C z C++. skoro programujesz w C++ dlaczego nie korzystasz z STLowych stringów, które mają .find?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Time limit is exhausted. Please reload CAPTCHA.