Following my previous question: Why `strchr` seems to work with multibyte characters, despite man page disclaimer?, I figured out that strchr
was a bad choice.
Instead I am thinking about using strstr
to look for a single character (multi-byte not 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:
é which is a multi-byte character
Which is what I expect: the position of the 1st byte of my multi-byte character.
A priori, this is not the canonical use of strstr
but it seems to work well.
Is this workaround safe ? Can you think about any side-effect or special case that would cause a bug ?
[EDIT]: I should precise that I do not want to use wchar_t
type and that strings I handle are UTF-8 encoded (I am aware this choice can be discussed but this an irrelevant debate)
strstr
may yield false positives. – Theirswchar
I got the same question in my previous post ^^ : see why – Timofei