W C (podając the N1570 draft, sekcja 7.1.1):
szeroki łańcuch jest ciągłą sekwencją szerokości znaków zakończone za pierwszym szerokim znakiem o wartości zerowej.
gdzie „szerokości znaków” to wartość typu wchar_t
, który jest zdefiniowany w <stddef.h>
jako typ całkowitej.
Nie mogę znaleźć definicji "szerokiego łańcucha" w the N3337 draft standardu C++, ale powinno być podobne. Jedną z niewielkich różnic jest to, że wchar_t
to typedef w C, a wbudowany typ (którego nazwa jest słowem kluczowym) w C++. Ale ponieważ C++ udostępnia większość biblioteki C, w tym funkcje działające na szerokich ciągach znaków, można bezpiecznie założyć, że definicje C i C++ są zgodne. (Jeśli ktoś może znaleźć coś bardziej konkretnego w standardzie C++, prosimy o komentarz lub edycję tego akapitu.)
W obu C i C++ rozmiar wchar_t
jest zdefiniowany przez implementację. Zwykle jest to 2 lub 4 bajty (16 lub 32 bity, chyba że używasz bardzo egzotycznego systemu z bajtami większymi niż 8 bitów). Szeroki ciąg jest ciągiem szerokich znaków (wartości wchar_t
), zakończonych szerokim znakiem zerowym. Znak kończący szeroki będzie miał taki sam rozmiar jak każdy inny szeroki znak, zwykle 2 lub 4 bajty.
W szczególności, biorąc pod uwagę, że jest większy niż wchar_t
char
, A pojedynczy znaku null nie kończy szeroki łańcuch.
Warto również zauważyć, że kolejność bajtów jest definiowana przez implementację.Szeroki znak o wartości 0x1234
, widzianego jako sekwencja 8-bitowych bajtach, mogą pojawić się, jak każdy z:
0x12
, 0x34
0x34
, 0x12
0x00
, 0x00
, 0x12
, 0x34
0x34
, 0x12
, 0x00
, 0x00
I to nie są jedyne możliwości.
języka? (Czy to nie ma znaczenia?) – John
Niestety, nie rozumiem tego dobrze. Dlaczego język jest materią? Ale jeśli tak, mówię o angielskim i chińskim – Kosmos
Nie :) jaki język programowania? C++? – John