gpt4 book ai didi

c - 我如何使用 mblen()?

转载 作者:太空狗 更新时间:2023-10-29 15:35:49 25 4
gpt4 key购买 nike

这里有一些测试代码可以帮助我理解多字节字符管理。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
char * line = malloc(1024);
size_t n;

getline(&line, &n, stdin);
while (*line) {
int offset = mblen(line, strlen(line));
if (offset == -1) return 0;
printf("%d\n", offset);
line += offset;
}
return 0;
}

据我了解,如果用户在哪里输入“éléphant”,我的输出应该显示 2 1 2 1 ...但是,对于 mblen 错误,它从第一个字节开始显示 -1。我想这可能不是这两行代码中的错误,我必须做什么,我可以阅读哪些资源,以提示这里发生了什么?当然 printf("%s", line) 可以(并且确实)完美地工作。

最佳答案

将我的评论变成答案。

详细信息可能取决于您的确切执行环境,但我认为以下内容适用于大多数 *NIX 系统。

mblen取决于当前语言环境

The behavior of this function is affected by the LC_CTYPE category of the current locale

启动时的默认语言环境是“C”语言环境(参见 setlocale ),这可能与您的期望不符。您可以方便地调用 setlocale(LC_CTYPE, "") 将语言环境设置为“ native ”环境。

请注意,调用 setlocale(LC_ALL, "")(正如我最初写的那样)会发生比您预期的更多的变化,因此请务必在执行此操作之前阅读所有与区域设置相关的内容.

关于c - 我如何使用 mblen()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21708630/

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