Witam. W jaki sposób mogę przeprowadzić konwersję char* do wchar_t tak aby uwzględnione były polskie znaki z parametru char* Pozdrawiam i z góry dziękuję za odpowiedź.
Nie sprawdziłem sposobu z linku ponieważ właśnie udało mi się w pewnym stopniu zrobić konwerter, ale jest jeden problem. Funkcja ta wygląda tak: (na razie akceptuje tylko "ś" jeśli chodzi o polskie znaki)
wchar_t *StringToWchar(const char *str)
{
int dlugosc=strlen(str);
wchar_t* res = (wchar_t*)malloc(sizeof(wchar_t)*dlugosc+1);
wchar_t* ok;
int j = 0;
for (int i=0; i<=dlugosc; i++)
{
if (str[i]=='ś') res[j]=L'ś';
else
res[j]=str[i];
j++;
}
ok = res;
free(res); // miejsce problemów
return ok;
}
Z funkcją free(res); nie ma wycieków pamięci ale np zamiast wyświetlić napis "Wyjście" wyświetla samo "jście", a gdy usunę free(res); napis "Wyjście" wyświetlany jest poprawnie, no ale są wycieki co jest sprawą oczywistą. Dlaczego tak się dzieje? przecież zapisuję wszystko do zmiennej wchar_t* ok a dopiero później usuwam res z pamięci... Bardzo proszę o pomoc.
--
Rozwiązałem już problem:) temat uznaję za zamknięty. Pozdrawiam
szczerze mowiac, lepiej jednak zerknij na to co jest w tamtym linku.
co do tego kodziku ktory tu wkleiles i 'rozwiazales' problem
- w c++ uzywa sie NEW/DELETE nie MALLOC/FREE
- co z tego ze robisz ok=res;free(res);.. przeciez ok i res to te same wskazniki. jak usuniesz res, to i ok usuwasz. to ze po wykonaniu free(res), w ok caly zcas siedzi napis to jest czysty przypadek -- po prostu system tam nie zdazyl nic nowego zapisac. ale, defacto, po free(res) TEGO NAPISU JUZ NIE MA
- po zwracaniu samego return res; oczywiscie ze byly wycieki. w tej funkcji alokujesz nowy napis i go zwracasz -- a po zwroceniu go kasowales? jak juz napisalem w 2) nie masz prawa go skasowac w tej funkcji, bo formalnie przestanie istniec i .. co zwrocisz? powinienes wlasnie zwracac ot, return res; tak jak za pewne miales na poczatku i powinienes go skasowac W FUNKCJI "JEDNO OCZKO WYZEJ", tej ktora ODBIERA res i cos na nim robi. jak skonczy cos na nim robic, powinna go usunac. i wyciekow nie bedzie. ta funkcja go tworzy i zwraca, tamta funkcja go odbiera i kasuje, zadna skomplikowana filozofia:)