格式化字符串

一个printf函数的例子

格式化字符串(英語:format string)是一些程序设计语言的输入/输出中能將字符串参数轉換為另一種形式輸出的函数。例如C、C++等程序设计语言的printf类函数,其中的转换说明(conversion specification)用于把随后对应的0个或多个函数参数转换为相应的格式输出;格式化字符串中转换说明以外的其它字符原样输出。[1]

C语言printf函数为代表的一类

格式化占位符

格式化字符串中的占位符用于指明输出的参数值如何格式化。

格式化占位符(format placeholder),语法是:

%[parameter][flags][field width][.precision][length]type

Parameter可以忽略或者是:

字符 描述
n$ n是用这个格式说明符(specifier)显示第几个参数;这使得参数可以输出多次,使用多个格式说明符,以不同的顺序输出。 如果任意一个占位符使用了parameter,则其他所有占位符必须也使用parameter。这是POSIX扩展,不属于ISO C。例:printf("%2$d %2$#x; %1$d %1$#x",16,17) 产生"17 0x11; 16 0x10"

Flags可为0个或多个:

字符 描述
+ 总是表示有符号数值的'+'或'-'号,缺省情况是忽略正数的符号。仅适用于数值类型。
空格 使得有符号数的输出如果没有正负号或者输出0个字符,则前缀1个空格。如果空格与'+'同时出现,则空格说明符被忽略。
- 左对齐。缺省情况是右对齐。
# 对于'g'与'G',不删除尾部0以表示精度。对于'f', 'F', 'e', 'E', 'g', 'G', 总是输出小数点。对于'o', 'x', 'X', 在非0数值前分别输出前缀0, 0x, and 0X表示数制。
0 如果width选项前缀以0,则在左侧用0填充直至达到宽度要求。例如printf("%2d", 3)输出" 3",而printf("%02d", 3)输出"03"。如果0-均出现,则0被忽略,即左对齐依然用空格填充。

Field Width给出显示数值的最小宽度,典型用于制表输出时填充固定宽度的表目。实际输出字符的个数不足域宽,则根据左对齐或右对齐进行填充。实际输出字符的个数超过域宽并不引起数值截断,而是显示全部。宽度值的前导0被解释为0填充标志,如上述;前导的负值被解释为其绝对值,负号解释为左对齐标志。如果域宽值为*,则由对应的函数参数的值为当前域宽。

Precision通常指明输出的最大长度,依赖于特定的格式化类型。对于d、i、u、x、o的整型数值,是指最小数字位数,不足的位要在左侧补0,如果超过也不截断,缺省值为1。对于a,A,e,E,f,F的浮点数值,是指小数点右边显示的数字位数,必要时四舍五入或补0;缺省值为6。对于g,G的浮点数值,是指有效数字的最大位数;缺省值为6。对于s的字符串类型,是指输出的字节的上限,超出限制的其它字符将被截断。如果域宽为*,则由对应的函数参数的值为当前域宽。如果仅给出了小数点,则域宽为0。

Length指出浮点型参数或整型参数的长度。此项Microsoft称为“Size”。可以忽略,或者是下述:

字符 描述
hh 对于整数类型,printf期待一个从char提升的int尺寸的整型参数。
h 对于整数类型,printf期待一个从short提升的int尺寸的整型参数。
l 对于整数类型,printf期待一个long尺寸的整型参数。

对于浮点类型,printf期待一个double尺寸的整型参数。对于字符串s类型,printf期待一个wchar_t指针参数。对于字符c类型,printf期待一个wint_t型的参数。

ll 对于整数类型,printf期待一个long long尺寸的整型参数。Microsoft也可以使用I64
L 对于浮点类型,printf期待一个long double尺寸的整型参数。
z 对于整数类型,printf期待一个size_t尺寸的整型参数。
j 对于整数类型,printf期待一个intmax_t尺寸的整型参数。
t 对于整数类型,printf期待一个ptrdiff_t尺寸的整型参数。

此外,在ISO C99广泛接受前,还有几个平台相关的length选项:

字符 描述
I 对于有符号整数类型,printf期待一个ptrdiff_t尺寸的整型参数。对于无符号整数类型,printf期待一个size_t尺寸的整型参数。常见于Win32/Win64平台。
I32 对于整数类型,printf期待一个32位(双字)的整型参数。常见于Win32/Win64平台。
I64 对于整数类型,printf期待一个64位(四字)的整型参数。常见于Win32/Win64平台。
q 对于整数类型,printf期待一个64位(四字)的整型参数。常见于BSD平台。

ISO C99的头文件inttypes.h包含了许多宏,用于平台独立的printf编码。例如:

定义
PRId32 典型地等效于I32d (Win32/Win64)或d
PRId64 典型地等效于I64d (Win32/Win64), lld (32位平台)或ld (64位平台)
PRIi32 典型地等效于I32i (Win32/Win64)或i
PRIi64 典型地等效于I64i (Win32/Win64), lli (32位平台)或li (64位平台)
PRIu32 典型地等效于I32u (Win32/Win64)或u
PRIu64 典型地等效于I64u (Win32/Win64), llu (32位平台)或lu (64位平台)
PRIx32 典型地等效于I32x (Win32/Win64)或x
PRIx64 典型地等效于I64x (Win32/Win64), llx (32位平台)或lx (64位平台)

类型

Type,也称转换说明(conversion specification/specifier),可以是:

字符 描述
d, i 有符号十进制数值int。'%d'与'%i'对于输出是同义;但对于scanf()输入二者不同,其中%i在输入值有前缀0x或0时,分别表示16进制或8进制的值。如果指定了精度,则输出的数字不足时在左侧补0。默认精度为1。精度为0且值为0,则输出为空。
u 十进制unsigned int。如果指定了精度,则输出的数字不足时在左侧补0。默认精度为1。精度为0且值为0,则输出为空。
f, F double型输出10进制定点英语Fixed-point arithmetic表示。'f'与'F'差异是表示无穷与NaN时,'f'输出'inf', 'infinity'与'nan';'F'输出'INF', 'INFINITY'与'NAN'。小数点后的数字位数等于精度,最后一位数字四舍五入。精度默认为6。如果精度为0且没有#标记,则不出现小数点。小数点左侧至少一位数字。
e, E double值,输出形式为10进制的([-]d.ddd e[+/-]ddd). E版本使用的指数符号为E(而不是e)。指数部分至少包含2位数字,如果值为0,则指数部分为00。Windows系统,指数部分至少为3位数字,例如1.5e002,也可用Microsoft版的运行时函数_set_output_format 修改。小数点前存在1位数字。小数点后的数字位数等于精度。精度默认为6。如果精度为0且没有#标记,则不出现小数点。
g, G double型数值,精度定义为全部有效数字位数。当指数部分在闭区间 [-4,5] 内,输出为定点形式;否则输出为指数浮点形式。'g'使用小写字母,'G'使用大写字母。小数点右侧的尾数0不被显示;显示小数点仅当输出的小数部分不为0。
x, X 16进制unsigned int。'x'使用小写字母;'X'使用大写字母。如果指定了精度,则输出的数字不足时在左侧补0。默认精度为1。精度为0且值为0,则输出为空。
o 8进制unsigned int。如果指定了精度,则输出的数字不足时在左侧补0。默认精度为1。精度为0且值为0,则输出为空。
s 如果没有用l标志,输出null结尾字符串英语null-terminated string直到精度规定的上限;如果没有指定精度,则输出所有字节。如果用了l标志,则对应函数参数指向wchar_t型的数组,输出时把每个宽字符转化为多字节字符,相当于调用wcrtomb函数。
c 如果没有用l标志,把int参数转为unsigned char型输出;如果用了l标志,把wint_t参数转为包含两个元素的wchart_t数组,其中第一个元素包含要输出的字符,第二个元素为null宽字符。
p void *
a, A double型的16进制表示,"[−]0xh.hhhh p±d"。其中指数部分为10进制表示的形式。例如:1025.010输出为0x1.004000p+10。'a'使用小写字母,'A'使用大写字母。[2][3] (C++11流使用hexfloat输出16进制浮点数)
n 不输出字符,但是把已经成功输出的字符个数写入对应的整型指针参数所指的变量。
% '%'字面值,不接受任何flags, width, precision or length。

宽度与精度格式化参数可以忽略,或者直接指定,或者用星号"*"表示取对应函数参数的值。例如printf("%*d", 5, 10)输出"   10";printf("%.*s", 3, "abcdef") 输出"abc"。

如果函数参数太少,不能匹配所有的格式参数说明符,或者函数参数的类型不匹配,将导致未定义(undefined)行为。过多的函数参数被忽略。许多时候,未定义的行为将导致格式化字符串攻击英语Format string attack

某些编译器,如GCC,会静态检查printf这一类函数的格式化参数并编译警告存在的问题(当使用编译标志-Wall-Wformat)。GCC也会对用户自定义的printf风格函数做静态检查,如果在函数定义时使用了非标准的 __attribute__((format(...)))

具有printf风格函数的编程语言

此外,Windows API的FormatMessage函数也使用格式化字符串说明。

参考文献

  1. ^ C11 standard n1570 draft. 7.21.6.1.3 pp309
  2. ^ "The GNU C Library Reference Manual", "12.12.3 Table of Output Conversions". Gnu.org. [2014-03-17]. (原始内容存档于2021-03-27). 
  3. ^ "printf"页面存档备份,存于互联网档案馆) ("%a" added in C99)

外部链接

Read other articles:

Maxime Weygand (pengucapan bahasa Prancis: [vɛɡɑ̃]; 21 Januari 1867 – 28 Januari 1965) merupakan seorang komandan militer Prancis dalam Perang Dunia I dan Perang Dunia II. Ia lahir di Belgia, dibesarkan di Prancis dan belajar di akademi militer Saint-Cyr di Paris. Setelah lulus pada tahun 1887 ia melanjutkan untuk menjadi seorang instruktur di Sekolah Kavaleri di Saumur. Selama Perang Dunia I, Weygand bekerja sebagai perwira staf untuk Jenderal Ferdinand Foch. Ia kemudian menjabat ...

 

 

Hari Nasional Republik TiongkokSebuah simbol yang sering terlihat dalam peringatan Hari Sepuluh Kembar (merupakan kombinasi dari dua aksara 10 (十))Nama lainHari Sepuluh KembarDirayakan oleh Republik TiongkokJenisHistoris, kultural, nasionalisPerayaanfestival perayaan, termasuk pertunjukan kembang api dan konserTanggal10 OktoberFrekuensitahunan Hari Nasional Republik Tiongkok (Hanzi tradisional: 國慶日; Hanzi sederhana: 国庆日; Pinyin: Guóqìng Rì; Zhuyin Fuhao: ...

 

 

King of Arabia and youngest of three Magi who visited Jesus SaintBalthazarBalthazar in The Adoration of the Three Kings by Girolamo da Santacroce, c. 1530[1]Three Magi, Three Kings, Three Wise MenVenerated inCatholic ChurchEastern Orthodox ChurchLutheranismCanonizedPre-CongregationMajor shrineShrine of the Three Kings, Cologne CathedralFeast6 January (Epiphany)6 January (date of his death)AttributesKing bearing gifts, king on a camel, three crowns, dark skinPatronageEpilepsy, thu...

Perang Italia-Etiopia PertamaBagian dari Perebutan AfrikaSearah jarum jam dari kiri atas: Tentara Italia dalam perjalanan ke Massawa; kastil Yohannes IV di Mek'ele;[6] Kavaleri Ethiopia di Pertempuran Adwa; Tahanan Italia dibebaskan setelah berakhirnya permusuhan; Menelik II di Adwa; Ras Makonnen memimpin pasukan Ethiopia di Pertempuran Amba AlagiTanggal13 Januari 1895 – 23 Oktober 1896 (1 tahun, 10 bulan, 1 minggu dan 1 hari)LokasiEritrea dan EtiopiaHasil Kemena...

 

 

Villa MariaVeduta della villaLocalizzazioneStato Italia RegioneToscana LocalitàLivorno IndirizzoVia Calzabigi - via Redi Coordinate43°32′28.95″N 10°19′10.56″E / 43.541375°N 10.319601°E43.541375; 10.319601Coordinate: 43°32′28.95″N 10°19′10.56″E / 43.541375°N 10.319601°E43.541375; 10.319601 Informazioni generaliCondizioniIn uso CostruzioneXIX secolo Usobiblioteca pubblica RealizzazioneCommittenteCapponi Rodocanacchi Lazzara Modifica ...

 

 

Neurological Institute of New York 40°50′32″N 73°56′34″W / 40.84227°N 73.94290°W / 40.84227; -73.94290 The Neurological Institute of New York, is an American hospital research center located at 710 West 168th Street at the corner of Fort Washington Avenue in the NewYork-Presbyterian Hospital / Columbia University Medical Center in the Washington Heights neighborhood of Manhattan, New York City. History The institute was founded in 1909 by Joseph Collins, Ch...

Questa voce sull'argomento centri abitati dell'Arizona è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Cibecuecensus-designated placeCibecue – Veduta LocalizzazioneStato Stati Uniti Stato federato Arizona ConteaNavajo TerritorioCoordinate34°02′40″N 110°29′04″W / 34.044444°N 110.484444°W34.044444; -110.484444 (Cibecue)Coordinate: 34°02′40″N 110°29′04″W / 34.044444°N 110.484444°W34.04...

 

 

Former UK Government department Lord Chancellor's DepartmentMinisterial Department overviewFormed1885Dissolved2003Superseding agencyDepartment for Constitutional AffairsJurisdictionGovernment of the United KingdomMinister responsibleLord Chancellor The Lord Chancellor's Department was a United Kingdom government department answerable to the Lord Chancellor with jurisdiction over England and Wales. Created in 1885[1] as the Lord Chancellor's Office with a small staff to assist the Lor...

 

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada November 2022. Dorothy WilsonLahir(1909-11-14)14 November 1909Minneapolis, Minnesota, A.S.Meninggal7 Januari 1998(1998-01-07) (umur 88)Lompoc, California, A.S.Tahun aktif1932–1943Suami/istriLewis R. Foster (1936-1974) Dorothy Wilson, Harold Lloyd, dan He...

Borough in Pennsylvania, United StatesEast Prospect, PennsylvaniaBoroughLocation in York County and the U.S. state of Pennsylvania.East ProspectLocation of East Prospect in PennsylvaniaShow map of PennsylvaniaEast ProspectEast Prospect (the United States)Show map of the United StatesCoordinates: 39°58′17″N 76°31′14″W / 39.97139°N 76.52056°W / 39.97139; -76.52056CountryUnited StatesStatePennsylvaniaCountyYorkSettled1849Incorporated1873Government •...

 

 

خوسيه مانويل دياز معلومات شخصية الميلاد 30 أغسطس 1968 (العمر 55 سنة)مدريد  مركز اللعب مهاجم الجنسية إسبانيا  معلومات النادي النادي الحالي إيست بنغال (مدرب) مسيرة الشباب سنوات فريق ريال مدريد المسيرة الاحترافية1 سنوات فريق م. (هـ.) 1988–1991 ريال سوسيداد ديبورتيفا الكالا 102 (15) 19...

 

 

此條目没有列出任何参考或来源。 (2013年10月28日)維基百科所有的內容都應該可供查證。请协助補充可靠来源以改善这篇条目。无法查证的內容可能會因為異議提出而被移除。 罗马里亚Romaria市镇罗马里亚在巴西的位置坐标:18°52′58″S 47°35′09″W / 18.8828°S 47.5858°W / -18.8828; -47.5858国家巴西州米纳斯吉拉斯州面积 • 总计401.965 平方公里(155.200...

Este artículo o sección necesita referencias que aparezcan en una publicación acreditada. Busca fuentes: «Arabitragus jayakari» – noticias · libros · académico · imágenesEste aviso fue puesto el 13 de marzo de 2009.   Arabitragus jayakari Estado de conservaciónEn peligro (UICN 3.1)[1]​TaxonomíaReino: AnimaliaFilo: ChordataClase: MammaliaOrden: ArtiodactylaFamilia: BovidaeSubfamilia: CaprinaeGénero: ArabitragusRopiquet & Hassanin, 2005Espe...

 

 

Road in Ireland This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: R618 road Ireland – news · newspapers · books · scholar · JSTOR (August 2021) (Learn how and when to remove this message) R618 roadBóthar R618Cork Road, Coachford, on the R618Route informationLength34.3 km (21.3 mi)LocationC...

 

 

Sano Nihon University College佐野日本大学短期大学view from the northTypePrivateEstablished1990 (women’s junior college)1996 (coeducational college)LocationSano, Tochigi, JapanWebsitehttp://sanotan.jp/ Sano Nihon University College (佐野日本大学短期大学, Sano Nihon daigaku tanki daigaku) is a private junior college in Sano, Tochigi, Japan. Originally established as a junior women's college in 1990, it became coeducational in 1996, and changed its name to Sano Internationa...

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Education in Norway – news · newspapers · books · scholar · JSTOR (July 2023) (Learn how and when to remove this message)Education in NorwayNorwegian Ministry ofEducation and ResearchMinister of EducationKari Nessa Nordtun (Ap)National education budget (N/A)Bu...

 

 

تجمع شروط  - قرية -  تقسيم إداري البلد  اليمن المحافظة محافظة حضرموت المديرية مديرية رماة العزلة عزلة رماة السكان التعداد السكاني 2004 السكان 27   • الذكور 16   • الإناث 11   • عدد الأسر 5   • عدد المساكن 5 معلومات أخرى التوقيت توقيت اليمن (+3 غرينيتش) تعديل مص...

 

 

Fictional character, associate and friend of Sherlock Holmes This article is about the Sherlock Holmes character. For other uses, see Dr. Watson (disambiguation). Fictional character Dr. WatsonSherlock Holmes characterDr. Watson (left) and Sherlock Holmes, by Sidney PagetFirst appearanceA Study in Scarlet (1887)Last appearanceThe Adventure of Shoscombe Old Place (1927, canon)Created byArthur Conan DoyleIn-universe informationFull nameJohn H. WatsonTitleDoctorOccupationPhysician, writer, Briti...

Amyra RosliLahirNur Amira Izzati binti Rosli24 Agustus 1991 (umur 32)Shah Alam, Selangor, MalaysiaPendidikanDiploma TeaterAlmamaterAkademi Seni Budaya dan Warisan KebangsaanPekerjaanPemeran, duta, model, pengacara, penyanyiTahun aktif2009, 2011–kiniTinggi5 ft 3 in (1,60 m)Suami/istriAmar Baharin ​(m. 2016)​Anak2 Nur Amira Izzati Rosli (lahir 24 Agustus 1991) atau dikenali sebagai Amyra Rosli merupakan seorang pemeran wanita asal Mal...

 

 

Spółgłoska półotwarta podniebienna Numer IPA 153 j Jednostka znakowa j Unikod U+006a UTF-8 (hex) 6a Inne systemy X-SAMPA j Kirshenbaum j IPA Braille↗ ⠚ Przykład informacje • pomoc Obraz znaku Ta strona zawiera symbole fonetyczne MAF. Bez właściwego wsparcia renderowania wyświetlane mogą być puste prostokąty lub inne symbole zamiast znaków Unikodu. Spółgłoska półotwarta podniebienna – rodzaj dźwięku spółgłoskowego. W systemie IPA i X-SAMPA oznaczana jes...