gpt4 book ai didi

c - wcwidth() 参数的预期编码

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:17 25 4
gpt4 key购买 nike

我试图找出 wcwidth() 参数的预期编码是什么。手册页对此一无所知,我浪费了几个小时试图找出它是什么。这是一个例子,在 C 中:

#include <stdio.h>
#include <wchar.h>

void main()
{
wchar_t c = L'h';
printf("%d\n", wcwidth(c));
}

我想知道我应该如何编码这个字 rune 字以便这个程序打印 2 而不是 -1

这是一个 Rust 示例:

extern "C" {
fn wcwidth(c: libc::wchar_t) -> libc::c_int;
}

fn main() {
let c = 'h';
println!("{}", unsafe { wcwidth(c as libc::wchar_t) });
}

同样,我想将此字符常量转换为 wchar_t (i32),以便该程序打印 2

谢谢。

更新:抱歉我的措辞,我让这个声音特定于 C 的长字 rune 字。我想将 任何语言 中的字 rune 字编码为 32 位 int,这样当我将它传递给 wcwidth 时,我会得到正确的答案。所以我的问题不是特定于 C 或 C 的长字 rune 字。

更新 2:我也很喜欢另一个函数,比如 wcwidth ,它指定得更好(甚至可能独立于平台)。例如。一个采用 UTF-8 编码字符并返回在等宽终端中呈现它所需的列数。

最佳答案

您需要添加对_XOPEN_SOURCE 的支持,还需要设置您的语言环境。

试试这个:

#define _XOPEN_SOURCE 700

#include <stdio.h>
#include <locale.h>
#include <wchar.h>

int main(void)
{
setlocale(LC_CTYPE, "");

wchar_t c = L'h';

printf("%d\n", wcwidth(c));
return 0;
}

关于c - wcwidth() 参数的预期编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58185069/

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