按照我之前的问题:尽管手册页有免责声明,为什么`strchr` 似乎适用于多字节字符?,我发现这strchr
是一个糟糕的选择。
相反,我正在考虑使用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);
输出:
é 是一个多字节字符
这是我所期望的:我的多字节字符的第一个字节的位置。
先验,这不是规范的使用,strstr
但它似乎运作良好。
这种解决方法安全吗?你能想到任何会导致错误的副作用或特殊情况吗?
[编辑]:我应该准确地说我不想使用wchar_t
type 并且我处理的字符串是 UTF-8 编码的(我知道可以讨论这个选择,但这是一个无关紧要的辩论)