gpt4 book ai didi

c - ncurses - mvwprintw 生成空格

转载 作者:行者123 更新时间:2023-11-30 15:31:26 24 4
gpt4 key购买 nike

我有一个 ncurses 项目,我在其中使用 mvwprintw 将长字符串打印到窗口。

mvwprintw(traceview_window_flatprofile, 1, 0, "%s", flatprofile_as_str());

结果如下所示:

  %       self    children             self    children
time time time calls /call /call name
39.86 886 µs 0 ns 32 27697 ns 0 ns addr_translate [13]
25.69 571 µs 1454 µs 1 571 µs 1454 µs main [0]
7.02 156 µs 0 ns 1 156 µs 0 ns addr_fini [66]
6.28 139 µs 55006 ns 1 139 µs 55006 ns addr_init [2]
3.83 85094 ns 21956 ns 2 42547 ns 10978 ns flatprofile_snprintf [43]
2.08 46150 ns 0 ns 1 46150 ns 0 ns addr_read_symbol_table [3]

当我将相同的字符串打印到 stderr 时,使用

fprintf(stderr, "%s\n", flatprofile_as_str());

结果如下:

  %       self    children             self    children
time time time calls /call /call name
39.86 886 µs 0 ns 32 27697 ns 0 ns addr_translate [13]
25.69 571 µs 1454 µs 1 571 µs 1454 µs main [0]
7.02 156 µs 0 ns 1 156 µs 0 ns addr_fini [66]
6.28 139 µs 55006 ns 1 139 µs 55006 ns addr_init [2]
3.83 85094 ns 21956 ns 2 42547 ns 10978 ns flatprofile_snprintf [43]
2.08 46150 ns 0 ns 1 46150 ns 0 ns addr_read_symbol_table [3]

您知道什么可能导致这种差异吗?

编辑:除了下面的答案之外,以下问题还解决了相关问题。
How to make ncurses display UTF-8 chars correctly in C?

最佳答案

差异似乎是由特殊字符 µ 引起的,我不太确定如何修复它,但您可能需要调整您的 flatprofile_as_str() 函数.

我记得 utf-8 中的特殊字符也有类似的问题,我通过使用这个函数来计算字符串的实际长度而不是字节数来解决它:

int strlen_utf8(char *s) { 
int i = 0, j = 0;
while (s[i]) {
if ((s[i] & 0xc0) != 0x80) j++;
i++;
}
return j;
}

关于c - ncurses - mvwprintw 生成空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24800105/

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