ncurses - mvwprintw生成空格

时间:2014-07-17 09:45:01

标签: c whitespace ncurses

我有一个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?

1 个答案:

答案 0 :(得分:1)

差异似乎是由特殊字符μ引起的,我不太确定如何修复它,但您可能需要调整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;
}