C 强制printf忽略格式设置

C 强制printf忽略格式设置,c,printf,curses,C,Printf,Curses,我正在使用pdcurses库,我正在编写一个函数,将屏幕上的一行向上移动一行。这涉及到复制当前行,然后将其粘贴到上面。问题是用于打印整行的curses函数,printw,使用与printf相同的格式字符串。这些行可能包含百分比符号,因此一旦粘贴,这些符号当然会丢失 函数的作用是:在 当前或指定的光标位置。格式字符串为 与标准C库的printf()中使用的相同。(printw() 可作为printf()的替代品。) 一个小例子是: chtype p[200]; winchnstr(w, p, 2

我正在使用pdcurses库,我正在编写一个函数,将屏幕上的一行向上移动一行。这涉及到复制当前行,然后将其粘贴到上面。问题是用于打印整行的curses函数,
printw
,使用与
printf
相同的格式字符串。这些行可能包含百分比符号,因此一旦粘贴,这些符号当然会丢失

函数的作用是:在 当前或指定的光标位置。格式字符串为 与标准C库的printf()中使用的相同。(printw() 可作为printf()的替代品。)

一个小例子是:

chtype p[200]; 
winchnstr(w, p, 200); //obtain the line
clrtoeol(); //remove the line

wmove(w, y-1, x); //move up a line
clrtoeol(); //erase the line
wprintw(w, p); //print the new line
有没有办法强迫printf将百分号视为正常值,而不必经过
p
并在每个百分号之间插入一个百分号?对于这么简单的事情来说,这似乎是一个相当烦人的问题

第一种解决方案是将
p
转换为字符串,遍历该字符串,并在每个
%
后面插入一个
%
。但是当我一次移动很多行时(我试图创造屏幕“向上”移动的效果),这可能不是最佳的解决方案性能方面的问题,不是吗


另一种解决方案是迭代
p
,只需使用
addch()
分别添加每个字符。但与
wprintw
相比,这会降低性能/效率吗?或者,
wprintw
仅仅是一个单独粘贴每个字符的美化版本?这真的是我仅有的两个选择吗?

你不能简单地改变一下:

wprintw(w, p);
改为:

wprintw(w, "%s", p);
或者:

waddchstr(w, p);

你不能简单地改变一下:

wprintw(w, p);
改为:

wprintw(w, "%s", p);
或者:

waddchstr(w, p);

要强制
printf
按原样接受字符串,请使用格式说明符
%s
并将字符串作为参数传递
printf
参数不适用于格式处理。对于字符串,只需将字节复制到目标缓冲区

printf("%s", "My string with % signs");
如果字符串不是以零结尾的,如果使用
%*s
格式说明符,可以将字符串前面的长度传递给printf:

printf("%*s", 5, "ab%cdefghi"); // prints "ab%cd"

请注意,长度参数的类型必须为
int
要强制
printf
接受字符串的原样,请使用格式说明符
%s
并将字符串作为参数传递
printf
参数不适用于格式处理。对于字符串,只需将字节复制到目标缓冲区

printf("%s", "My string with % signs");
如果字符串不是以零结尾的,如果使用
%*s
格式说明符,可以将字符串前面的长度传递给printf:

printf("%*s", 5, "ab%cdefghi"); // prints "ab%cd"

请注意,长度参数的类型必须为
int

,您可以使用
addstr()
而不是
printw()
。(
printw()
基本上只是解析格式字符串并将结果传递给
addstr()

您可以使用
addstr()
而不是
printw()
。(
printw()
基本上只是解析格式字符串并将结果传递给
addstr()

你说得对。问这么简单的问题让我觉得有点愚蠢。谢谢,你说得对。问这么简单的问题让我觉得有点愚蠢。谢谢,谢谢你的帮助,谢谢你的帮助。