这是我的 main() 代码:
#include <stdio.h>
#include <stdlib.h>
#ifdef __gnu_linux__
#include <ncurses.h>
#endif
#ifdef _WIN32
#include <curses.h>
#endif
#include "terminal_info.h"
#include "interface.h"
int main()
{
initscr();
setvbuf(stdout, NULL, _IONBF, 0);
testForUI();
readUIFile();
continuouslyUpdateInfo();
refresh();
printDocument();
getch();
endwin();
clearAll();
return 0;
}
我遇到的问题发生在printDocument()
:
void printDocument()
{
int counter = 0;
printw("Document Size: %d\n", documentSize);
for(counter = 0; counter < documentSize; counter++)
{
printw("%c",(char)document[counter]);
refresh();
}
}
在 for 循环开始时,gdb 说 document 的内容如下:
$1 = (uint8_t *) 0x3e32c0 "<Root>\r\n <Hello>World</Hello>\r\n <This>\r\n
<Is>:-)</Is>\r\n <An>:-O</An>\r\n <Example>:-D</Example>\r\n </This>\r\n</Root>\r\n««««««««_î_î_"
但程序只打印:
Document Size: 123
但是,如果我将 printw 语句更改为:
printw("%c - %d",(char)document[counter], document[counter]);
我明白了:
Document Size: 123
- 13
- 10 - 32 - 32 - 32 - 32< - 60H - 72e - 101l - 108l - 108o - 111> - 62W - 8
7o - 111r - 114l - 108d - 100< - 60/ - 47H - 72e - 101l - 108l - 108o - 111> - 6
- 13
- 13
- 10 - 9< - 60I - 73s - 115> - 62: - 58- - 45) - 41< - 60/ - 47I - 73s - 115
- 13
- 10 - 9< - 60A - 65n - 110> - 62: - 58- - 45O - 79< - 60/ - 47A - 65n - 110
- 13
- 10 - 9< - 60E - 69x - 120a - 97m - 109p - 112l - 108e - 101> - 62: - 58- -
- 13
- 13
- 13
- 10
我尝试使用 setvbuf() 禁用 main() 中的缓冲,但它对我没有任何好处。
以下是阅读和打印的文档,如果它可能有帮助:
<Root>
<Hello>World</Hello>
<This>
<Is>:-)</Is>
<An>:-O</An>
<Example>:-D</Example>
</This>
</Root>
文件声明:extern uint8_t * document;