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 åèæå >æä»¶è¾å ¥/è¾åº > wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
ä»ç»å®ä½ç½®å è½½æ°æ®ï¼å°å®ä»¬è½¬æ¢æå®½å符串çä»·ç©å¹¶å°ç»æåå ¥åç§æ± ä¸ã
stream ãbufsz大äºé¶ï¼ååç»æå°å®½å符串bufferãè³å¤å
许åå
¥åé空宽å符çbufsz-1个宽å符ãè¥bufsz为é¶ï¼åä¸åå
¥ä»»ä½å
容ï¼ä¸bufferå¯ä»¥æ¯ç©ºæéï¼ç¶èè¿åå¼ï¼ä¼è¢«åå
¥ç宽å符æ°ï¼è¢«ç
§æ ·è®¡ç®å¹¶è¿åã-
formatä¸åå¨è½¬æ¢æå®ç¬¦%n - ä»»ä½ä¸ä¸ªå¯¹åº
%sçåæ°æ¯ç©ºæé -
formatæbufferæ¯ç©ºæé -
bufszä¸ºé¶æå¤§äº RSIZE_MAX - ä»»ä½ä¸ä¸ªå符串ååç¬¦è½¬æ¢æå®ç¬¦ä¸åºç°ç¼ç é误
- ï¼ä»
对äº
swprintf_sï¼ä¼åå ¥ç宽å符æ°å«ç©ºå®½å符ï¼å°è¶ åºbufszã
-
- åææè¾¹çæ£æ¥å½æ°ï¼
wprintf_s, fwprintf_s, swprintf_s, snwprintf_sä» è¥å®ç°å®ä¹äº __STDC_LIB_EXT1__ ï¼ä¸ç¨æ·å¨å å«<wchar.h>åå®ä¹ __STDC_WANT_LIB_EXT1__ ä¸ºæ´æ°å¸¸é 1 æä¿è¯å¯ç¨ã
åæ°
| stream | - | è¦åå ¥çè¾åºæä»¶æµ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| buffer | - | æåè¦åå ¥ç宽å符串çæé | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| bufsz | - | æå¤ä¼åå ¥ bufsz - 1 个宽å符ï¼åå ç©ºç»æ¢ç¬¦ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| format | - | æåæå®æ°æ®è½¬è¯æ¹å¼çç©ºç»æ¢å®½å符串çæéã
æ ¼å¼åç¬¦ä¸²ç±æ®é宽å符ï¼é¤äº
ä¸åæ ¼å¼æå®ç¬¦å¯ç¨ï¼
æµ®ç¹è½¬æ¢å½æ°è½¬æ¢æ ç©·å¤§å° éæ°è½¬æ¢æ è½¬æ¢ å°½ç®¡ å®å®½æ´æ°ç±»åï¼ int8_t çï¼çæ£ç¡®è½¬æ¢æå®å®ä¹äºå¤´æä»¶ <inttypes.h> ï¼å°½ç®¡ PRIdMAX ã PRIuMAX çå°±æ¯ å
ååå
¥è½¬æ¢æå®ç¬¦ %n æ¯å®å
¨æ¼æ´ç常è§ç®æ ï¼è¿éæ ¼å¼å符串ä¾èµç¨æ·è¾å
¥ï¼èæè¾¹çæ£æ¥ç 卿¯ä¸ªè½¬æ¢æå®ç¬¦çè¡å¨åæä¸ä¸ªåºåç¹ï¼è¿å 许äºåä¸åé夿¬¡åå ¥ %n çç»æï¼å¹¶å¨å䏿¤è°ç¨ä¸æå°åºå å以 %n åå¨çå¼ã è¥è½¬æ¢æå®éæ³ï¼åè¡ä¸ºæªå®ä¹ã
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ... | - | æå®è¦æå°æ°æ®çåæ°ãè¥ä»»ä½åæ°å¨é»è®¤åæ°æåå䏿¥æå¯¹åºè½¬æ¢æå®ç¬¦ææå¾
çç±»åï¼æè¥åæ°å°äº format æè¦æ±çæ°éï¼åè¡ä¸ºæªå®ä¹ãè¥æå¤äº format æè¦æ±çåæ°ï¼åæ±å¼å¹¶å¿½ç¥é¢å¤åæ°
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
è¿åå¼
size ï¼å« size ä¸ºé¶æ¶ï¼å为è´å¼ãbuffer ç宽å符æ°ï¼ä¸è®¡ç©ºç»æ¢ç¬¦ï¼ãç¼ç é误åçåæº¢åºæ¶è¿åè´å¼ãææå
¶ä»é误åçæ¶è¿åé¶ãbufsz å
å大忬åºåå
¥ buffer ç宽å符æ°ï¼ä¸è®¡ç©ºç»æ¢ç¬¦ï¼ï¼æè
è¥é误åçå为è´å¼ãï¼å³åå
¥æåä»
å½è¿åå¼éè´ä¸å°äº bufsz ï¼ã注æ
çªå符串æä¾ snprintf ï¼å®ä½¿å¾ç¡®å®éæ±çç¼å²åºå¤§å°å¯è¡ï¼ä¸è¿å®½å符串æ çä»·ç©ï¼å¨ C11 ç snwprintf_s åï¼ï¼è为äºç¡®å®ç¼å²åºå¤§å°ï¼ç¨åºå¯è½éè¦è°ç¨ swprintf ï¼æ£æ¥è¿åå¼ï¼å¹¶éåé æ´å¤§çç¼å²åºï¼åå¤å°è¯ç´è³æåã
ä¸åäº swprintf_s ï¼ snwprintf_s å°æªæç»æä»¥éåº buffer ææåçæ°ç»ï¼å°½ç®¡è¿ç§æªæè¢«å¤æ°è¾¹çæ£æ¥å½æ°å½åé误ã
示ä¾
#include <locale.h> #include <wchar.h>  int main(void) { char narrow_str[] = "z\u00df\u6c34\U0001f34c"; // æ "zÃæ°´????" // æ "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c"; wchar_t warr[29]; // æå¾ çå符串为 28 åèå 1 ä¸ªç©ºç»æ¢ç¬¦ setlocale(LC_ALL, "en_US.utf8"); swprintf(warr, sizeof warr/sizeof *warr, L"Converted from UTF-8: '%s'", narrow_str); wprintf(L"%ls\n", warr); }
è¾åºï¼
Converted from UTF-8: 'zÃæ°´????'
å¼ç¨
- C11 standard (ISO/IEC 9899:2011):
- 7.29.2.1 The fwprintf function (p: 403-410)
- 7.29.2.3 The swprintf function (p: 416)
- 7.29.2.11 The wprintf function (p: 421)
- K.3.9.1.1 The fwprintf_s function (p: 628)
- K.3.9.1.4 The swprintf_s function (p: 630-631)
- K.3.9.1.13 The wprintf_s function (p: 637-638)
- C99 standard (ISO/IEC 9899:1999):
- 7.24.2.1 The fwprintf function (p: 349-356)
- 7.24.2.3 The swprintf function (p: 362)
- 7.24.2.11 The wprintf function (p: 366)
åé
| (C99)(C11)(C11)(C11)(C11) |
æå°æ ¼å¼åè¾åºå° stdout ãæä»¶æµæç¼å²åº (彿°) |
| (C95)(C95)(C95)(C11)(C11)(C11)(C11) |
æå°æ ¼å¼å宽å符è¾åºå° stdout ãæä»¶æµæç¼å²åº 使ç¨å¯ååæ°å表 (彿°) |
| (C95) |
å°ä¸ä¸ªå®½å符串åå
¥æä»¶æµ (彿°) |