首先我想说,我对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“字符”,
0xC2
,strpbrk()
返回的不是NULL
。关于c - strpbrk表现不符合预期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27622490/