Strlen a polskie znaki

0

Strlen nie wylicza prawidłowo długości stringu. W poniższym kodzie string s ma długość 4, a printf wyświetla długość 8.
Dlaczego strlen zwraca złą wartość? Co można z tym zrobić?

#include <stdio.h>
#include <string.h>

int main(void)
{
    char s[] = "ĄĘżć";

    printf("%d\n", (int) strlen(s));

    return 0;
}

Kompilator gcc 4.6.2

0

Jeżeli chcesz przechowywać tekst (jakikolwiek) to tablica char (bajtów) w zupełności wystarczy. Jeżeli chcesz analizować tekst z polskimi znakami (w sensie, że potrzebujesz rozróżnić poszczególne znaki) to potrzebny jest ci inny zestaw funkcji, działające na łańcuchach wchar_t. W tym wypadku - wcslen.

0

Użyć jakieść biblioteki obsługującej Unicode, albo ustawić specjalne kodowanie dostosowane do polskich znaków (pierwsze rozwiązanie lepsze). Pewnym rozwiązaniem jest też używanie wchar_t, ale nie gwarantuje ono tego, że jeden znak zajmuje jedno miejsce (na Windowsie nawet pomijając akcenty).

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