簡體   English   中英

用C解碼printf語句(Printf Primer)

[英]Decoding printf statements in C (Printf Primer)

我正在努力將一些舊代碼從1998年帶到21世紀。 該過程的第一步是將printf語句轉換為QString變量。 不管我多少次回頭看看printf,我總是忘記了一件事。 所以,為了好玩,讓我們一起解碼它,為了時間的緣故,並在此過程中為Stackoverflow創建第一個小'printf primer'

在代碼中,我遇到了這個小寶石,

printf("%4u\t%016.1f\t%04X\t%02X\t%1c\t%1c\t%4s", a, b, c, d, e, f, g);

如何格式化變量a,b,c,d,e,f,g?

丹尼大多是對的。

一種。 無符號十進制,最少4個字符,空格填充
浮點,小數點前最小16位(0填充),小數點后1位
C。 十六進制,最少4個字符,0個填充,字母以大寫字母打印
d。 與上述相同,但最少2個字符
e被假定為int,轉換為unsigned char並打印
F。 與e相同
G。 這可能是一個錯字,4沒有效果。 如果是“%.4s”,則將打印字符串中最多4個字符。 有趣的是,在這種情況下,字符串不需要以null結尾。

編輯: jj33指出了b和g以上2個錯誤在這里

@Jason Day ,我認為如果少於4個字符,那么最后一個%4s中的4是重要的。 如果你有4個以上是正確的,%4s和%s將是相同的,但是在g%s中少於4個字符將被左對齊,而%4s將在4個char字段中右對齊。

b實際上是整個字段的最小16個字符,包括小數和小數點后的單個數字(16個字符總數與18個字符總數)

這是我的printf入門: http//www.pixelbeat.org/programming/gcc/format_specs.html

我總是用-ccall與gcc編譯,它將警告所提供的printf格式和變量之間的任何不匹配。

@jj33,你在兩個方面都是對的。

#include <stdio.h>

int main(int argc, char *argv[]) {
    char *s = "Hello, World";
    char *s2 = "he";

    printf("4s: '%4s'\n", s);
    printf(".4s: '%.4s'\n", s);
    printf("4s2: '%4s'\n", s2);
    printf(".4s2: '%.4s'\n", s2);

    return 0;
}

$ gcc -o foo foo.c
$ ./foo
4s: 'Hello, World'
.4s: 'Hell'
4s2: '  he'
.4s2: 'he'

接得好!

你真正需要的是一個工具,它接受printf()語句中的格式字符串,並將它們轉換為基於QString的等效函數調用。
有沒有人想花費他的自由軟件捐贈時間來開發這樣的工具?

URL的占位符,用於保存此類工具的源代碼的自由軟件托管服務

一種。 十進制,四位有效數字

不確定

C。 十六進制,最少4個字符

d。 十六進制,最少2個字符

1個字符

F。 字符串,最少4個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM