簡體   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