gpt4 book ai didi

c - strpbrk 的行为不符合预期

转载 作者:太空宇宙 更新时间:2023-11-04 02:45:43 26 4
gpt4 key购买 nike

首先我想说,我是 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: ¼”,如果字符串是“¾”,输出是“Found: ¾”。但是对于“¾”,我预计输出为 NULL,因为搜索到的模式不在字符串中。为什么不是这样呢?我该如何更改它?

可能是因为 ¼ 不是“正常”字符?

感谢您的帮助!

最佳答案

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

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

这两个字符的 UTF-8 编码是:

0xC2 0xBC
0xC2 0xBE

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com