繁体   English   中英

强制printf忽略格式

[英]Forcing printf to ignore formatting

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

printw()函数将格式化的字符串添加到当前或指定光标位置的窗口中。 格式字符串与标准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版本? 这些真的是我仅有的两个选择吗?

要强制printf原样接受您的字符串,请使用格式说明符%s并将您的字符串作为参数传递。 printf参数不受格式处理的约束。 如果是字符串,则将字节简单地复制到目标缓冲区。

printf("%s", "My string with % signs");

如果您的字符串不是以零结尾的,则可以使用%*s格式说明符在字符串前向printf传递一个长度:

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

请注意,length参数必须为int类型。

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

您不能简单地更改:

wprintw(w, p);

改为:

wprintw(w, "%s", p);

或者:

waddchstr(w, p);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM