Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C printw()元';t从uint8\u t数组打印单个字符_C_Ncurses_Curses_Pdcurses - Fatal编程技术网

C printw()元';t从uint8\u t数组打印单个字符

C printw()元';t从uint8\u t数组打印单个字符,c,ncurses,curses,pdcurses,C,Ncurses,Curses,Pdcurses,以下是我的main()代码: 在for循环的开始,gdb说文档的内容如下: $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

以下是我的main()代码:

在for循环的开始,gdb说文档的内容如下:

$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««««««««_î_î_"
但是,如果我将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
文档大小: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>

世界
:-)
:-O
:-D

文件声明:
extern uint8_t*文件

您需要去掉回车符(CR)字符(
\r

输出CR时,ncurses将光标重置为同一行中的第一列。然后,当您输出NL(
\n
)时,ncurses会在将光标移动到下一行之前从光标位置擦除到该行的末尾。这实际上删除了刚刚打印的整行

这种行为被记录在案,不管它值多少钱。从
man waddch
(增加强调):

如果
ch
是制表符、换行符或退格符,则光标将在窗口内适当移动。退格将光标向左移动一个字符;在窗口的左边缘,它什么也不做换行符执行一个
clrtool
,然后将光标移动到下一行的窗口左边距,如果在最后一行,则滚动窗口。制表符被视为位于每八列。可以通过设置
TABSIZE
变量来更改选项卡间隔

对运输返回的响应记录在ncurses waddch手册页的可移植性部分末尾:

如果
ch
是回车符,光标将移动到窗口当前行的开头。其他实现也是如此,但没有记录在案


(感谢Thomas Dickey指向可移植性部分。)

声明
文档[]
。可能在
printw(“%c”,(char)文档[计数器])之后添加
fflush(stdout)
@chux发布了声明,
fflush(stdout)
什么也没做:/谢谢一群人!我从来没有想到这就是原因。幸好我打印了文件的内容,嗯?:)注意到“大多数这种行为”,提出了一个问题:@rici假设没有记录的方面是什么?(马车返回的动作是在电影的结尾提到的,所以这不可能)。@ThomasDickey:很公平。我想我应该在狙击前通读到底。谢谢你。
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
<Root>
    <Hello>World</Hello>
    <This>
    <Is>:-)</Is>
    <An>:-O</An>
    <Example>:-D</Example>
    </This>
</Root>