C åèæå
- C è¯è¨
- C å ³é®è¯
- é¢å¤çå¨
- C æ ååºå¤´æä»¶
- ç±»åæ¯æ
- ç¨åºæ¯æå·¥å ·
- å忰彿°
- é误å¤ç
- 卿å å管ç
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- ç®æ³
- æ°å¼
- æä»¶è¾å ¥/è¾åº
- gets, gets_s
- printf, fprintf, sprintf, snprintf, printf_s, fprintf_s, sprintf_s, snprintf_s
- fopen, fopen_s
- fputc, putc
- fputs
- getchar
- putchar
- FILE
- fpos_t
- stdin, stdout, stderr
- freopen, freopen_s
- fwide
- setbuf
- setvbuf
- fclose
- fflush
- fread
- fwrite
- fgetc, getc
- fgets
- puts
- ungetc
- fgetwc
- fgetws
- fputwc, putwc
- fputws
- getwchar
- putwchar
- ungetwc
- scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_s
- wscanf, fwscanf, swscanf, wscanf_s, fwscanf_s, swscanf_s
- vscanf, vfscanf, vsscanf, vscanf_s, vfscanf_s, vsscanf_s
- vwscanf, vfwscanf, vswscanf, vwscanf_s, vfwscanf_s, vswscanf_s
- wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
- vprintf, vfprintf, vsprintf, vsnprintf, vprintf_s, vfprintf_s, vsprintf_s, vsnprintf_s
- vwprintf, vfwprintf, vswprintf, vwprintf_s, vfwprintf_s, vswprintf_s, vsnwprintf_s
- ftell
- fgetpos
- fseek
- fsetpos
- rewind
- clearerr
- feof
- ferror
- perror
- remove
- rename
- tmpfile, tmpfile_s
- tmpnam, tmpnam_s
- æ¬å°åæ¯æ
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C æ ååº
- æç¨çèµæº
- 符å·ç´¢å¼
- 注é
ä½ç½®ï¼é¦é¡µ > C åèæå >æä»¶è¾å ¥/è¾åº > printf, fprintf, sprintf, snprintf, printf_s, fprintf_s, sprintf_s, snprintf_s
printf, fprintf, sprintf, snprintf, printf_s, fprintf_s, sprintf_s, snprintf_s
ä»ç»å®ä½ç½®å è½½æ°æ®ï¼è½¬æ¢ä¸ºå符串çä»·ç©ï¼å¹¶åç»æå°åç§æ± ã
stream ãbuffer ãbuffer ãè³å¤å buf_size - 1 个å符ã产ççå符串ä¼ä»¥ç©ºåç¬¦ç»æ¢ï¼é¤é buf_size 为é¶ãè¥ buf_size 为é¶ï¼åä¸åå
¥ä»»ä½å
容ï¼ä¸ buffer å¯ä»¥æ¯ç©ºæéï¼ç¶è便§è®¡ç®è¿åå¼ï¼ä¼åå
¥çå符æ°ï¼ä¸å
å«ç©ºç»æ¢ç¬¦ï¼å¹¶è¿åã-
formatä¸åå¨è½¬æ¢æå®ç¬¦%n - ä»»ä½ä¸ä¸ªå¯¹åº
%sçåæ°æ¯ç©ºæé -
formatæbufferæ¯ç©ºæé -
bufszä¸ºé¶æå¤§äº RSIZE_MAX - å¨ä»»ä½ä¸ä¸ªå符串ååç¬¦è½¬æ¢æå®ç¬¦ä¸åºç°ç¼ç é误
- ï¼ä»
对äº
sprintf_sï¼åå¨äºbufferçå符串ï¼å æ¬å°¾é空å符ï¼é¿åº¦å°è¶ åºbufsz
-
- åææè¾¹çæ£æ¥å½æ°ï¼
printf_s, fprintf_s, sprintf_s, snrintf_sä» è¥å®ç°å®ä¹äº __STDC_LIB_EXT1__ ï¼ä¸ç¨æ·å¨å å«<stdio.h>åå®ä¹ __STDC_WANT_LIB_EXT1__ ä¸ºæ´æ°å¸¸é 1 æä¿è¯å¯ç¨ã
åæ°
| stream | - | è¦åå ¥çè¾åºæä»¶æµ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| buffer | - | æåè¦åå ¥çå符串çæé | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| bufsz | - | æå¤ä¼åå ¥ bufsz - 1 个å符ï¼åå ç©ºç»æ¢ç¬¦ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| format | - | æåæå®æ°æ®è½¬è¯æ¹å¼çç©ºç»æ¢å¤åèå符串çæéã
æ ¼å¼åç¬¦ä¸²ç±æ®éå¤åèå符ï¼é¤äº
ä¸åæ ¼å¼æå®ç¬¦å¯ç¨ï¼
æµ®ç¹è½¬æ¢å½æ°è½¬æ¢æ ç©·å¤§å° éæ°è½¬æ¢æ è½¬æ¢ å°½ç®¡ å®å®½æ´æ°ç±»åï¼ int8_t çï¼çæ£ç¡®è½¬æ¢æå®å®ä¹äºå¤´æä»¶ <inttypes.h> ï¼å°½ç®¡ PRIdMAX ã PRIuMAX çå°±æ¯ å
ååå
¥è½¬æ¢æå®ç¬¦ %n æ¯å®å
¨æ¼æ´ç常è§ç®æ ï¼è¿éæ ¼å¼å符串ä¾èµç¨æ·è¾å
¥ï¼èæè¾¹çæ£æ¥ç 卿¯ä¸ªè½¬æ¢æå®ç¬¦çè¡å¨åæä¸ä¸ªåºåç¹ï¼è¿å 许äºåä¸åé夿¬¡åå ¥ %n çç»æï¼å¹¶å¨å䏿¤è°ç¨ä¸æå°åºå å以 %n åå¨çå¼ã è¥è½¬æ¢æå®éæ³ï¼åè¡ä¸ºæªå®ä¹ã
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ... | - | æå®è¦æå°æ°æ®çåæ°ãè¥ä»»ä½é»è®¤åæ°æååç忰䏿¥æå¯¹åºè½¬æ¢æå®ç¬¦ææå¾
çç±»åï¼æè¥åæ°æ°éå°äº format çè¦æ±ï¼åè¡ä¸ºæªå®ä¹ãè¥æå¤äº format è¦æ±çåæ°ï¼åæ±å¼å¹¶å¿½ç¥å¤åºçåæ°ã
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
è¿åå¼
buffer çå符æ°ï¼ä¸è®¡ç©ºç»æ¢å符ï¼ï¼æè¥è¾åºé误æç¼ç é误ï¼å¯¹äºå符串ååç¬¦è½¬æ¢æå®ç¬¦ï¼åçå为è´å¼ãbufsz 忬åºåå
¥å° buffer çå符æ°ï¼ä¸è®¡ç©ºç»æ¢å符ï¼ï¼æè¥åºç°è¾åºé误æç¼ç é误ï¼å¯¹äºå符串ååç¬¦è½¬æ¢æå®ç¬¦ï¼å为è´å¼ãbufferçå符æ°ï¼ä¸è®¡ç©ºç»æ¢å符ï¼åªè¦ buffer 䏿¯ç©ºæéä¸ bufsz éé¶ä¸ä¸å¤§äº RSIZE_MAX ï¼å°±åå
¥å®ï¼ï¼å¨è¿è¡æ¶å¶çº¦è¿è§æ¶ä¸ºé¶ï¼èå¨ç¼ç é误æ¶ä¸ºè´å¼ãbufsz 忬åºåå
¥ buffer çå符æ°çï¼ä¸å
å«ç©ºç»æ¢å符ï¼åªè¦ buffer 䏿¯ç©ºæéè bufsz éé¶ä¸ä¸å¤§äº RSIZE_MAX ï¼å°±åå
¥å®ï¼ï¼æè¥åºç°è¾åºé误ãè¿è¡æ¶å¶çº¦è¿è§é误æç¼ç é误å为è´å¼ã注æ
C æ ååPOSIX æå® sprintf åå
¶åä½çè¡ä¸ºå¨åæ°ä¸ç®æ ç¼å²åºéå æ¶æªå®ä¹ã示ä¾ï¼
sprintf(dst, "%s and %s", dst, t); // <- æéï¼æªå®ä¹è¡ä¸º
POSIX è§å®å¨é误æ¶è®¾ç½® errno ãå®äº¦æå®é¢å¤çè½¬æ¢æå®ï¼æå¼å¾æ³¨æçæ¯å¯¹åæ°éæåºçæ¯æï¼ç´§é % åç n$ æç¤ºç¬¬ n ä¸ªåæ°ï¼ã
以é¶ä¸º bufsz å空æé为 buffer è°ç¨ snprintf å¯ç¨äºå³å®å
å«è¾åºçç¼å²åºå¤§å°ï¼
å snprintf ï¼ä½ä¸åäº sprintf_s ï¼ snprintf_s ä¼å°è¾åºæªæå¨ bufsz-1 ä¹å
ã
示ä¾
#include <stdio.h>  int main(void) { printf("Strings:\n"); const char* s = "Hello"; printf("\t.%10s.\n\t.%-10s.\n\t.%*s.\n", s, s, 10, s);  printf("Characters:\t%c %%\n", 65);  printf("Integers\n"); printf("Decimal:\t%i %d %.6i %i %.0i %+i %u\n", 1, 2, 3, 0, 0, 4, -1); printf("Hexadecimal:\t%x %x %X %#x\n", 5, 10, 10, 6); printf("Octal:\t%o %#o %#o\n", 10, 10, 4);  printf("Floating point\n"); printf("Rounding:\t%f %.0f %.32f\n", 1.5, 1.5, 1.3); printf("Padding:\t%05.2f %.2f %5.2f\n", 1.5, 1.5, 1.5); printf("Scientific:\t%E %e\n", 1.5, 1.5); printf("Hexadecimal:\t%a %A\n", 1.5, 1.5); }
è¾åºï¼
Strings:
. Hello.
.Hello .
. Hello.
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å¼ç¨
- C11 standard (ISO/IEC 9899:2011):
- 7.21.6.1 The fprintf function (p: 309-316)
- 7.21.6.3 The printf function (p: 324)
- 7.21.6.5 The snprintf function (p: 325)
- 7.21.6.6 The sprintf function (p: 325-326)
- K.3.5.3.1 The fprintf_s function (p: 591)
- K.3.5.3.3 The printf_s function (p: 593-594)
- K.3.5.3.5 The snprintf_s function (p: 594-595)
- K.3.5.3.6 The sprintf_s function (p: 595-596)
- C99 standard (ISO/IEC 9899:1999):
- 7.19.6.1 The fprintf function (p: 274-282)
- 7.19.6.3 The printf function (p: 290)
- 7.19.6.5 The snprintf function (p: 290-291)
- 7.19.6.6 The sprintf function (p: 291)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.9.6.1 The fprintf function
- 4.9.6.3 The printf function
- 4.9.6.5 The sprintf function
åé
| (C95)(C95)(C95)(C11)(C11)(C11)(C11) |
æå°æ ¼å¼å宽å符è¾åºå° stdout ãæä»¶æµæç¼å²åº (彿°) |
| (C99)(C11)(C11)(C11)(C11) |
æå°æ ¼å¼åè¾åºå°stdoutãæä»¶æµæç¼å²åº 使ç¨å¯ååæ°å表 (彿°) |
| å°ä¸ä¸ªå符串åå
¥æä»¶æµ (彿°) | |
| (C11)(C11)(C11) |
ä»stdinãæä»¶æµæç¼å²åºè¯»åæ ¼å¼åè¾å
¥ (彿°) |