C++ Porównywanie dwóch, *char


(Jakub625) #1

Witam mam problem z porównaniem dwóch łańcuchów znaków pod C++, program się kompiluje tylko, że po uruchomieniu i podaniu komendy Windows wyrzuca komunikat że "Program przestał działać". Nie bardzo wiem co jest nie tak, szukałem już w google, przesiadam się pomału z Pascala na C++. Kompiluje pod MS Visual C++ 2008 Express Edition + Vista Home Premium SP2.

#include 

#include 

#include 

#include 

#include 


void ProgHelp()

{

	using namespace std;


	cout << "help - Pomoc. \n";

	cout << "exit - Zamyka program. \n";

	cout << "\n";

}

void cmdKolor()

{

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),                   

		BACKGROUND_BLUE | FOREGROUND_BLUE | FOREGROUND_INTENSITY |                  

		FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); 

	system("CLS");

}


int main()

{ 

	using namespace std;


	char* komenda = "";


	cmdKolor();


	do

	{

		cout << "Program> ";

		cin >> komenda;

		if (strcmp(komenda, "help") == 0) ProgHelp;

	}while(!(strcmp(komenda, "exit") == 0));


	system("PAUSE");

	return 0;

}

Z góry dzięki za pomoc...


(Sawyer47) #2
char* komenda = "";

cin >> komenda;

Najpierw przypisujesz do wskaźnika komenda pewien adres (tej stałej znakowej), a potem piszesz pod ten adres... więc nic dziwnego, że program nie działa, tak jakbyś chciał. Jeśli piszesz w C++ (nie jestem pewien, bo twój kod to raczej mieszanina C i C++) to wygodnie jest używać std::string, nie trzeba się bardzo martwić alokacją pamięci.


(Jakub625) #3

To w takim razie jak to powinno wyglądać ?


(etam) #4

Na początku dajesz "#include " (string.h możesz wywalić)

Tu masz dokumentację do stringa: http://www.cplusplus.com/reference/string/string/

Tu masz jak on współpracuje ze strumieniami: http://www.cplusplus.com/reference/stri ... tor%3E%3E/

Tu masz jak się je porównuje: http://www.cplusplus.com/reference/stri ... g/compare/

Gotowego kodu Ci nie podam.


(Sawyer47) #5

Jeśli z użyciem std::string to tak:

#include 


std::string komenda;

std::cin >> komenda;

// Oraz porównywanie przez operatory

komenda == "Help"

Więcej o klasie string: http://www.cppreference.com/wiki/string/start


(etam) #6

albo tak:

#include 

using namespace std;


string komenda;

cin >> komenda;

// Oraz porównywanie przez operatory

komenda == "Help"