이전의 질문 : Why `strchr` seems to work with multibyte characters, despite man page disclaimer?에 뒤이어, strchr
는 나쁜 선택이었습니다. `strstr`을 사용하여 문자열의 멀티 바이트 UTF-8 문자를 검색하는 것이 안전합니까?
strstr
를 사용하는 방법에 대해 생각하고 (멀티 바이트하지
char
) :
const char str[] = "This string contains é which is a multi-byte character";
char * pos = strstr(str, "é"); // 'é' = 0xC3A9: 2 bytes
printf("%s\n", pos);
OUPUT :
é 멀티 바이트를 문자
입니다
내 멀티 바이트 문자의 첫 번째 바이트의 위치는 다음과 같습니다.
선험적으로, 이것은 strstr
의 표준적인 사용은 아니지만 잘 작동하는 것 같습니다.
이 해결 방법은 안전한가요? 버그를 유발할 수있는 부작용이나 특별한 경우에 대해 생각해 볼 수 있습니까?
[편집] : 내가해야 정확한 나는 wchar_t
유형과 내가 처리 할 문자열이 UTF-8로 인코딩 된 것을 (나는이 choice 논의 할 수 있습니다 알고 있지만 관련없는 논쟁)
_ "선험적으로, 이것은 표준이 아닙니다."_ 그렇습니까? UTF8로 인코딩 된 문자열 일뿐입니다. –
@AdrianoRepetti UTF8 일 필요는 없습니다. –
그것은 당신의 구현이 얼마나 "정상적인 "지에 달려 있습니다. 로케일 특정 멀티 바이트 인코딩은 UTF-7 (또는 상태를 갖는 다른 것)이 될 수 있습니다.이 경우'strstr'은 거짓 긍정을 산출 할 수 있습니다. – mafso