strpbrk没有按预期行事

时间:2014-12-23 14:37:56

标签: c string function design-patterns output

首先我想说,我对C.很新。 我的strpbrk函数有问题。

我的函数获取一个字符串。 如果这个字符串包含“¼”,它应该做一些事情,如果它包含“¾”它应该做其他事情。

static char* format_date_string3(char *string) {
   printf("Found: %s\n", strpbrk(string, "¼"));
   if (strpbrk(string, "¼") != NULL) {
       //do something
   } else if (strpbrk(string, "¾") != NULL) {
       //do something else
   }
}

我添加了printf用于调试目的。

问题是如果字符串是“¼”则输出为“Found:¼”,如果字符串为“¾”则输出为“找到:¾”。但对于“¾”我期望输出为NULL,因为搜索的模式不在字符串中。为什么不是这样?我怎样才能改变它?

原因可能是¼不是“普通”字符吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

strpbrk()不支持多字节编码。

源代码中的¼¾很可能被编码为UTF-8,但在运行时被解释为ASCII。

两个字符的UTF-8编码为:

0xC2 0xBC
0xC2 0xBE

由于他们共享一个共同的ASCII“字符”0xC2strpbrk()正在返回NULL以外的其他内容。