Witam, próbuję rozwiązać zadanie z książki "Szkoła programowania. Język c++" Stephena Praty, wydanie 5 , rok wydania 2006.
Jego treść: Napisz funkcję mającą prototyp:
int replace(char * str, char c1, char c2);
Niech ta funkcja zastępuje każdy znak c1 występujący w łańcuchu str znakiem c2, poczym zwraca liczbę dokonanych zastapień.
Wcześniej, gdy nie stosowałem rzutowania otrzymywałem następujący błąd:
G:\CodeBlocks programy\test2\main.cpp|10|warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]|
Po użyciu debuggera otrzymałem wiadomość o Segmentation fault, czyli gdzieś naruszam pamięć. Program od razu się zawiesza.
Teoretycznie powinienem skorzystać z kwalifikatora const, ale przecież zmieniam ten łańcuch za pomocą wskaźnika, jestem tutaj skołowany.
Czy w c++ w ogóle pisze się programy przy użyciu tablic znakowych, czy korzysta się tylko ze stringów? Proszę Was o pomoc i wytłumaczenie mojego błędu/błędów ;) Pozdrawiam!
#include<iostream>
using namespace std;
int replace(char * str, char c1, char c2);
int main(void)
{
char *str = (char*)"alibababa";
cout<<replace(str,'a','s');
cout<<str;
return 0;
}
int replace(char * str, char c1, char c2){
int total = 0;
while(*str){
if(*str == c1)
*str = c2;
str++;
total++;
}
return total;
}