Konwersja const char* do wchar_t* i polskie znaki

0

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ź.

0

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

0

szczerze mowiac, lepiej jednak zerknij na to co jest w tamtym linku.

co do tego kodziku ktory tu wkleiles i 'rozwiazales' problem

  1. w c++ uzywa sie NEW/DELETE nie MALLOC/FREE
  2. 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
  3. 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:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1