[英]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.