首先我想说,我对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。
问题是,如果字符串是“1/4”,则输出为“找到:1/4”;如果字符串是“3/4”,则输出为“找到:3/4”。但是对于“¾”,我希望输出为空,因为搜索的模式不在字符串中。为什么不是这样?我该怎么改?
是不是因为有四分之一的字符不是“正常”字符?
谢谢你的帮助!

最佳答案

strpbrk()不支持多字节编码。
很可能源代码中的¼¾被编码为UTF-8,但在运行时被解释为ASCII。
这两个字符的UTF-8编码是:

0xC2 0xBC
0xC2 0xBE

由于它们共享一个通用的ASCII“字符”,0xC2strpbrk()返回的不是NULL

关于c - strpbrk表现不符合预期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27622490/

10-09 05:05