C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- C 飿 ¼æä»¶è¾å ¥/è¾åº
- è¾å ¥/è¾åºæçºµç¬¦
- std::ios_base
- std::basic_osyncstream
- std::clearerr
- std::fopen
- std::fgetc, std::getc
- std::printf, std::fprintf, std::sprintf, std::snprintf
- std::scanf, std::fscanf, std::sscanf
- std::FILE
- std::basic_streambuf
- std::basic_filebuf
- std::basic_stringbuf
- std::strstreambuf
- std::basic_syncbuf
- std::basic_ios
- std::basic_istream
- std::basic_ostream
- std::basic_iostream
- std::basic_ifstream
- std::basic_ofstream
- std::basic_fstream
- std::basic_istringstream
- std::basic_ostringstream
- std::basic_stringstream
- std::istrstream
- std::ostrstream
- std::strstream
- std::streamoff
- std::streamsize
- std::fpos
- std::iostream_category
- std::io_errc
- std::cin, std::wcin
- std::cout, std::wcout
- std::cerr, std::wcerr
- std::clog, std::wclog
- 注é
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >è¾å ¥/è¾åºåº >C 飿 ¼æä»¶è¾å ¥/è¾åº > std::printf, std::fprintf, std::sprintf, std::snprintf
std::printf, std::fprintf, std::sprintf, std::snprintf
ä»ç»å®ä½ç½®å è½½æ°æ®ï¼è½¬æ¢ä¸ºå符串çä»·çæ¬ï¼å¹¶å°ç»æåå ¥åç§æ± ã
stream ãbuffer ãbuffer ãè³å¤å buf_size - 1 个å符ã产ççå符串ä¼ä»¥ç©ºåç¬¦ç»æ¢ï¼é¤é buf_size 为é¶ãè¥ buf_size 为é¶ï¼åä¸åå
¥ä»»ä½å
容ï¼ä¸ buffer å¯ä»¥æ¯ç©ºæéï¼ç¶è便§è®¡ç®è¿åå¼ï¼ä¼åå
¥çå符æ°ï¼ä¸å
å«ç©ºç»æ¢ç¬¦ï¼å¹¶è¿åãè¥è°ç¨ sprintf æ snprintf 导è´å¨éå ç对象é´åçå¤å¶ï¼åè¡ä¸ºæªå®ä¹ãï¼ä¾å¦ sprintf(buf, "%s text", buf); ï¼
åæ°
| stream | - | è¦åå ¥çè¾åºæä»¶æµ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| buffer | - | æåè¦åå ¥çå符串çæé | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| buf_size | - | åå ¥è³å¤ buf_size - 1 个å符ï¼åå ä¸ç©ºç»æ¢ç¬¦ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| format | - | æåæå®å¦ä½è½¬è¯æ°æ®çç©ºç»æ¢å¤åèå符串çæéã
æ ¼å¼åç¬¦ä¸²ç±æ®éå¤åèå符ï¼é¤äº
ä¸åæ ¼å¼æå®ç¬¦å¯ç¨ï¼
æµ®ç¹è½¬æ¢å½æ°è½¬æ¢æ ç©·å¤§å° éæ°è½¬æ¢æ è½¬æ¢ å°½ç®¡ å®å®½æ´æ°ç±»åï¼ int8_t çï¼çæ£ç¡®è½¬æ¢æå®å®ä¹äºå¤´æä»¶ <cinttypes> ï¼å°½ç®¡ PRIdMAX ã PRIuMAX çå°±æ¯ å
ååå
¥è½¬æ¢æå®ç¬¦ %n æ¯å®å
¨æ¼æ´ç常è§ç®æ ï¼è¿éæ ¼å¼å符串ä¾èµç¨æ·è¾å
¥ï¼èæè¾¹çæ£æ¥ç 卿¯ä¸ªè½¬æ¢æå®ç¬¦çè¡å¨åæä¸ä¸ªåºåç¹ï¼è¿å 许äºåä¸åé夿¬¡åå ¥ %n çç»æï¼å¹¶å¨å䏿¤è°ç¨ä¸æå°åºå å以 %n åå¨çå¼ã è¥è½¬æ¢æå®éæ³ï¼åè¡ä¸ºæªå®ä¹ã
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ... | - | æå®è¦æå°æ°æ®çåæ°ãè¥ä»»ä½åæ°ç±»å䏿¯å¯¹åºè½¬æ¢æå®ç¬¦æææè
ï¼æè¥åæ°æ°éå°äº format æè¦æ±è¿ï¼åè¡ä¸ºæªå®ä¹ãè¥åæ°æ°éå¤äº format æè¦æ±è
ï¼åæ±å¼å忽ç¥é¢å¤åæ°
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
è¿åå¼
buf_size æå®å
¨åå
¥ï¼ç©ºç»æ¢ï¼ã注æ
POSIX è§å®å¨é误æ¶è®¾ç½® errno ãå®äº¦æå®é¢å¤çè½¬æ¢æå®ï¼æå¼å¾æ³¨æçæ¯å¯¹åæ°éæåºçæ¯æï¼ç´§é % åç n$ æç¤ºç¬¬ n ä¸ªåæ°ï¼ã
ä»¥é¶ buf_size åå¯¹äº buffer ç空æéè°ç¨ std::snprintf éç¨äºç¡®å®å®¹çº³è¾åºçæéç¼å²åºå¤§å°ï¼
const char *fmt = "sqrt(2) = %f"; int sz = std::snprintf(nullptr, 0, fmt, std::sqrt(2)); std::vector<char> buf(sz + 1); // 注æä¸ºç©ºç»æ¢ç¬¦ +1 std::snprintf(&buf[0], buf.size(), fmt, std::sqrt(2));
示ä¾
#include <cstdio> #include <limits> #include <cstdint> #include <cinttypes>  int main() { std::printf("Strings:\n");  const char* s = "Hello"; std::printf("\t[%10s]\n\t[%-10s]\n\t[%*s]\n\t[%-10.*s]\n\t[%-*.*s]\n", s, s, 10, s, 4, s, 10, 4, s);  std::printf("Characters:\t%c %%\n", 65);  std::printf("Integers\n"); std::printf("Decimal:\t%i %d %.6i %i %.0i %+i %u\n", 1, 2, 3, 0, 0, 4, -1); std::printf("Hexadecimal:\t%x %x %X %#x\n", 5, 10, 10, 6); std::printf("Octal:\t%o %#o %#o\n", 10, 10, 4);  std::printf("Floating point\n"); std::printf("Rounding:\t%f %.0f %.32f\n", 1.5, 1.5, 1.5); std::printf("Padding:\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5); std::printf("Scientific:\t%E %e\n", 1.5, 1.5); std::printf("Hexadecimal:\t%a %A\n", 1.5, 1.5); std::printf("Special values:\t0/0=%g 1/0=%g\n", 0.0/0.0, 1.0/0.0);  std::printf("Variable width control:\n"); std::printf("right-justified variable width: '%*c'\n", 5, 'x'); int r = std::printf("left-justified variable width : '%*c'\n", -5, 'x'); std::printf("(the last printf printed %d characters)\n", r);  // å®å®½ç±»å std::uint32_t val = std::numeric_limits<std::uint32_t>::max(); std::printf("Largest 32-bit value is %" PRIu32 " or %#" PRIx32 "\n", val, val); }
è¾åºï¼
Strings:
[ Hello]
[Hello ]
[ Hello]
[Hell ]
[Hell ]
Characters: AÂ %
Integers
Decimal: 1 2 000003 0 +4 4294967295
Hexadecimal: 5 a A 0x6
Octal: 12 012 04
Floating point
Rounding: 1.500000 2 1.30000000000000004440892098500626
Padding: 01.50 1.50 1.50
Scientific: 1.500000E+00 1.500000e+00
Hexadecimal: 0x1.8p+0 0X1.8P+0
Special values: 0/0=nan 1/0=inf
Variable width control:
right-justified variable width: ' x'
left-justified variable width : 'x '
(the last printf printed 40 characters)
Largest 32-bit value is 4294967295 or 0xffffffffåé
| æå°ææ ¼å¼å®½å符è¾åºå° stdoutãæä»¶æµæç¼å²åº (彿°) | |
| 使ç¨å¯åå®åå表 æå°ææ ¼å¼è¾åºå° stdoutãæä»¶æµæç¼å²åº (彿°) | |
| ååç¬¦ä¸²å°æä»¶æµ (彿°) | |
| ä» stdinãæä»¶æµæç¼å²åºè¯»åææ ¼å¼è¾å
¥ (彿°) | |
| (C++17) |
è½¬æ¢æ´æ°ææµ®ç¹å¼å°å符åºå (彿°) |