本文包括大部分C標準庫函數(shù),但沒有列出一些用途有限的函數(shù)以及某些可以簡單的從其他函數(shù)合成的函數(shù),也沒有包含多字節(jié)和本地化函數(shù)。
標準庫中的各個函數(shù)、類型以及宏分別在以下標準頭文件中說明:
<assert.h> | <float.h> | <math.h> | <stdarg.h> | <stdlib.h> |
<ctype.h> | <limits.h> | <setjmp.h> | <stddef.h> | <string.h> |
<errno.h> | <locale.h> | <signal.h> | <stdio.h> | <time.h> |
1 輸入與輸出<stdio.h>
頭文件<stdio.h>定義了用于輸入和輸出的函數(shù)、類型和宏。最重要的類型是用于聲明文件指針的FILE。另外兩個常用的類型是size_t和fpos_t,size_t是由運算符sizeof產生的無符號整類型;fpos_t類型定義能夠唯一說明文件中的每個位置的對象。由頭部定義的最有用的宏是EOF,其值代表文件的結尾。
1.1 文件操作
1.1.1 fopen
#include <stdio.h>
FILE *fopen(const char *filename, const char *mode);
返回:成功為FILE指針,失敗為NULL
打開以filename所指內容為名字的文件,返回與之關聯(lián)的流。
mode決定打開的方式,可選值如下:
"r" | 打開文本文件用于讀 |
"w" | 創(chuàng)建文本文件用于寫,并刪除已存在的內容(如果有的話) |
"a" | 添加;打開或創(chuàng)建文本文件用于在文件末尾寫 |
"rb" | 打開二進制文件用于讀 |
"wb" | 創(chuàng)建二進制文件用于寫,并刪除已存在的內容(如果有的話) |
"ab" | 添加;打開或創(chuàng)建二進制文件用于在文件末尾寫 |
"r+" | 打開文本文件用于更新(即讀和寫) |
"w+" | 創(chuàng)建文本文件用于更新,并刪除已存在的內容(如果有的話) |
"a+" | 添加;打開或創(chuàng)建文本文件用于更新和在文件末尾寫 |
"rb+"或"r+b" | 打開二進制文件用于更新(即讀和寫) |
"wb+"或"w+b" | 創(chuàng)建二進制文件用于更新,并刪除已存在的內容(如果有的話) |
"ab+"或"a+b" | 添加;打開或創(chuàng)建二進制文件用于更新和在文件末尾寫 |
后六種方式允許對同一文件進行讀和寫,要注意的是,在寫操作和讀操作的交替過程中,必須調用fflush()或文件定位函數(shù)如fseek()、fsetpos()、rewind()等。
文件名filename的長度最大為FILENAME_MAX個字符,一次最多可打開FOPEN_MAX個文件(在<stdio.h>中定義)。
1.1.2 freopen
#include <stdio.h>
FILE *freopen(const char *filename, const char *mode, FILE *stream);
返回:成功為stream,失敗為NULL
以mode指定的方式打開文件filename,并使該文件與流stream相關聯(lián)。freopen()先嘗試關閉與stream關聯(lián)的文件,不管成功與否,都繼續(xù)打開新文件。
該函數(shù)的主要用途是把系統(tǒng)定義的標準流stdin、stdout、stderr重定向到其他文件。
1.1.3 fflush
#include <stdio.h>
int fflush(FILE *stream);
返回:成功為0,失敗返回EOF
對輸出流(寫打開),fflush()用于將已寫到緩沖區(qū)但尚未寫出的全部數(shù)據(jù)都寫到文件中;對輸入流,其結果未定義。如果寫過程中發(fā)生錯誤則返回EOF,正常則返回0。
fflush(NULL)用于刷新所有的輸出流。
程序正常結束或緩沖區(qū)滿時,緩沖區(qū)自動清倉。
1.1.4 fclose
#include <stdio.h>
int flcose(FILE *stream);
返回:成功為0,失敗返回EOF
刷新stream的全部未寫出數(shù)據(jù),丟棄任何未讀的緩沖區(qū)內的輸入數(shù)據(jù)并釋放自動分配的緩沖區(qū),最后關閉流。
1.1.5 remove
#include <stdio.h>
int remove(const char *filename);
返回:成功為0,失敗為非0值
刪除文件filename。
1.1.6 rename
#include <stdio.h>
int rename(const char *oldfname, const char *newfname);
返回:成功為0,失敗為非0值
把文件的名字從oldfname改為newfname。
1.1.7 tmpfile
#include <stdio.h>
FILE *tmpfile(void);
返回:成功為流指針,失敗為NULL
以方式"wb+"創(chuàng)建一個臨時文件,并返回該流的指針,該文件在被關閉或程序正常結束時被自動刪除。
1.1.8 tmpnam
#include <stdio.h>
char *tmpnam(char s[L_tmpnam]);
返回:成功為非空指針,失敗為NULL
若參數(shù)s為NULL(即調用tmpnam(NULL)),函數(shù)創(chuàng)建一個不同于現(xiàn)存文件名字的字符串,并返回一個指向一內部靜態(tài)數(shù)組的指針。
若s非空,則函數(shù)將所創(chuàng)建的字符串存儲在數(shù)組s中,并將它作為函數(shù)值返回。s中至少要有L_tmpnam個字符的空間。
tmpnam函數(shù)在每次被調用時均生成不同的名字。在程序的執(zhí)行過程中,最多只能確保生成TMP_MAX個不同的名字。注意tmpnam函數(shù)只是用于創(chuàng)建一個名字,而不是創(chuàng)建一個文件。
1.1.9 setvbuf
#include <stdio.h>
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
返回:成功返回0,失敗返回非0
控制流stream的緩沖區(qū),這要在讀、寫以及其他任何操作之前設置。
如果buf非空,則將buf指向的區(qū)域作為流的緩沖區(qū),如果buf為NULL,函數(shù)將自行分配一個緩沖區(qū)。
size決定緩沖區(qū)的大小。
mode指定緩沖的處理方式,有如下值:
- _IOFBF,進行完全緩沖;
- _IOLBF,對文本文件表示行緩沖;
- _IOLNF,不設置緩沖。
1.1.10 setbuf
#include <stdio.h>
void setbuf(FILE *stream, char *buf);
如果buf為NULL,則關閉流stream的的緩沖區(qū);否則setbuf函數(shù)等價于:
(void)setvbuf(stream, buf, _IOFBF, BUFSIZ)。
注意自定義緩沖區(qū)的尺寸必須為BUFSIZ個字節(jié)。
1.2 格式化輸出
1.2.1 fprintf
#include <stdio.h>
int fprintf(FILE *stream, const char *format,…);
返回:成功為實際寫出的字符數(shù),出錯返回負值
按照format說明的格式把變元表中變元內容進行轉換,并寫入stream指向的流。
格式化字符串由兩種類型的對象組成:普通字符(它們被拷貝到輸出流)與轉換規(guī)格說明(它們決定變元的轉換和輸出格式)。每個轉換規(guī)格說明均以字符%開頭,以轉換字符結束。如果%后面的字符不是轉換字符,那么該行為是未定義的。
轉換字符列表如下:
字 符 | 說明 |
d, i | int;有符號十進制表示法 |
o | unsigned int;無符號八進制表示法(無前導0) |
x, X | unsigned int;無符號十六進制表示法(無前導0X和0x),對0x用abcdef,對0X用ABCDEF |
u | unsigned int;無符號十進制表示法 |
c | int;單個字符,轉換為unsigned char類型后輸出 |
s | char *;輸出字符串直到'\0'或者達到精度指定的字符數(shù) |
f | double;形如[-]mmm.ddd的十進制浮點數(shù)表示法,d的數(shù)目由精度確定。缺省精度為6位,精度為0時不輸出小數(shù)點 |
e, E | double;形如[-]m.dddddde[+-]xx或者[-]m.ddddddE[+-]xx的十進制浮點數(shù)表示法,d的數(shù)目由精度確定。缺省精度為6位,精度為0時不輸出小數(shù)點 |
g G | double;當指數(shù)值小于-4或大于等于精度時,采用%e或%E的格式;否則使用%f的格式。尾部的0與小數(shù)點不打印 |
p | void *;輸出指針值(具體表示與實現(xiàn)相關) |
n | int *;到目前為止以此格式調用函數(shù)輸出的字符的數(shù)目將被寫入到相應變元中,不進行變元轉換 |
% | 不進行變元轉換,輸出% |
在%與轉換字符之間依次可以有下列標記:
標記 | 說明 |
- | 指定被轉換的變元在其字段內左對齊 |
+ | 指定在輸出的數(shù)前面加上正負號 |
空格 | 如果第一個字符不是正負號,那么在其前面附加一個空格 |
0 | 對于數(shù)值轉換,在輸出長度小于字段寬度時,加前導0 |
# | 指定其他輸出格式,對于o格式,第一個數(shù)字必須為零;對于x/X格式,指定在輸出的非0值前加0x或0X;對于e/E/f/g/G格式,指定輸出總有一個小數(shù)點;對于g/GG格式,還指定輸出值后面無意義的0將被保留。 |
寬度[number] | 一個指定最小字段寬的數(shù)。轉換后的變元輸出寬度至少要達到這個數(shù)值。如果變元的字符數(shù)小于此數(shù)值,那么在變元左/右邊添加填充字符。填充字符通常為空格(設置了0標記則為0)。 |
. | 點號用于把字段寬和精度分開 |
精度[number] | 對于字符串,說明輸出字符的最大數(shù)目;對于e/E/f格式,說明輸出的小數(shù)位數(shù);對于g/G格式,說明輸出的有效位數(shù);對于整數(shù),說明輸出的最小位數(shù)(必要時可加前導0) |
h/l/L | 長度修飾符,h表示對應的變元按short或unsigned short類型輸出;l表示對應的變元按long或unsigned long類型輸出;L表示對應的變元按long double類型輸出 |
在格式串中字段寬度和精度二者都可以用*來指定,此時該值可通過轉換對應的變元來獲得,這些變元必須是int類型。
1.2.2 printf
#include <stdio.h>
int printf(const char *format, …);
printf(...)等價于fprintf(stdout, ...)。
1.2.3 sprintf
#include <stdio.h>
int sprintf(char *buf, const char *format, …);
返回:實際寫到字符數(shù)組的字符數(shù),不包括'\0'
與printf()基本相同,但輸出寫到字符數(shù)組buf而不是stdout中,并以'\0'結束。
注意,sprintf()不對buf進行邊界檢查,buf必須足夠大,以便能裝下輸出結果。
1.2.4 snprintf
#include <stdio.h>
int snprintf(char *buf, size_t num, const char *format, …);
除了最多為num-1個字符被存放到buf指向的數(shù)組之外,snprintf()和sprintf()完全相同。數(shù)組以'\0'結束。
該函數(shù)不屬于C89(C99增加的),但應用廣泛,所以將其包括了進來。
1.2.5 vprintf
1.2.6 vfprintf
1.2.7 vsprintf
1.2.8 vsnprintf
#include <stdarg.h>
#include <stdio.h>
int vprintf(char *format, va_list arg);
int vfprintf(FILE *stream, const char *format, va_list arg);
int vsprintf(char *buf, const char *format, va_list arg);
int vsnprintf(char *buf, size_t num, const char *format, va_list arg);
這幾個函數(shù)與對應的printf()等價,但變元表由arg代替。參見
第7節(jié)有關<stdarg.h>頭文件的討論。
vsnprintf是C99增加的。
1.3 格式化輸入
1.3.1 fscanf
#include <stdio.h>
int fscanf(FILE *stream, const char *format, …);
返回:成功為實際被轉換并賦值的輸入項數(shù)目,到達文件尾或變元被轉換前出錯為EOF
在格式串format的控制下從流stream中讀入字符,把轉換后的值賦給后續(xù)各個變元,在此每一個變元都必須是一個指針。當格式串format結束時函數(shù)返回。
格式串format通常包含有用于指導輸入轉換的轉換規(guī)格說明。格式串中可以包含:
- 空格或制表符,他們將被忽略;
- 普通字符(%除外),與輸入流中下一個非空白字符相匹配;
- 轉換規(guī)格說明:由一個%、一個賦值屏蔽字符*(可選)、一個用于指定最大字段寬度的數(shù)(可選)、一個用于指定目標字段的字符h/l/L(可選)、一個轉換字符組成。
轉換規(guī)格說明決定了輸入字段的轉換方式。通常把結果保存在由對應變元指向的變量中。然而,如果轉換規(guī)格說明中包含有賦值屏蔽字符*,例如%*s,那么就跳過對應的輸入字段,不進行賦值。輸入字段是一個由非空白符組成的字符串,當遇到空白符或到達最大字段寬(如果有的話)時,對輸入字段的讀入結束。這意味著scanf函數(shù)可以跨越行的界限來讀入其輸入,因為換行符也是空白符(空白符包括空格、橫向制表符、縱向制表符、換行符、回車符和換頁符)。
轉換字符列表如下:
字符 | 輸入數(shù)據(jù);變元類型 |
d | 十進制整數(shù);int * |
i | 整數(shù);int *。該整數(shù)可以是以0開頭的八進制數(shù),也可以是以0x/0X開頭的十六進制數(shù) |
o | 八進制數(shù)(可以帶或不帶前導0);unsigned int * |
u | 無符號十進制整數(shù);unsigned int * |
x | 十六進制整數(shù)(可以帶或不帶前導0x/0X);unsigned int * |
c | 字符;char *。按照字段寬的大小把讀入的字符保存在指定的數(shù)組中,不加入字符'\0'。字段寬的缺省值為1。在這種情況下,不跳過空白符;如果要讀入下一個非空白符,使用%1s(數(shù)字1) |
s | 有非空白符組成的字符串(不包含引號);char *。該變元指針指向一個字符數(shù)組,該字符數(shù)組有足夠空間來保存該字符串以及在末尾添加的'\0' |
e/f/g | 浮點數(shù);float *。float浮點數(shù)的輸入格式為:一個任選的正負號,一串可能包含小數(shù)點的數(shù)字和一個任選的指數(shù)字段。指數(shù)字段由字母e/E以及后跟的一個可能帶正負號的整數(shù)組成 |
p | 用printf("%p")調用輸出的指針值;void * |
n | 將到目前為止此調用所讀的字符數(shù)寫入變元;int *。不讀入輸入字符。不增加轉換項目計數(shù) |
[...] | 用方括號括起來的字符集中的字符來匹配輸入,以找到最長的非空字符串;char *。在末尾添加'\0'。格式[]...]表示字符集中包含字符] |
[^...] | 用不在方括號里的字符集中的字符來匹配輸入,以找到最長的非空字符串;char *。在末尾添加'\0'。格式[]...]表示字符集中包含字符] |
% | 字面值%,不進行賦值 |
字段類型字符:
- 如果變元是指向short類型而不是int類型的指針,那么在d/i/n/o/u/x這幾個轉換字符前可以加上字符h;
- 如果變元是指向long類型的指針,那么在d/i/n/o/u/x這幾個轉換字符前可以加上字符l;
- 如果變元是指向double類型而不是float類型的指針,那么在e/f/g這幾個轉換字符前可以加上字符l;
- 如果變元是指向long double類型的指針,那么在e/f/g前可以加上字符L。
1.3.2 scanf
#include <stdio.h>
int scanf(const char *format, …);
scanf(...)等價于fscanf(stdin, ...)。
1.3.3 sscanf
#include <stdio.h>
int sscanf(const char *buf, const char *format, …);
與scanf()基本相同,但sscanf()從buf指向的數(shù)組中讀,而不是stdin。
1.4 字符輸入輸出函數(shù)
1.4.1 fgetc
#include <stdio.h>
int fgetc(FILE *stream);
以unsigned char類型返回輸入流stream中下一個字符(轉換為int類型)。如果到達文件末尾或發(fā)生錯誤,則返回EOF。
1.4.2 fgets
#include <stdio.h>
char *fgets(char *str, int num, FILE *stream);
返回:成功返回str,到達文件尾或發(fā)生錯誤返回NULL
從流stream中讀入最多num-1個字符到數(shù)組str中。當遇到換行符時,把換行符保留在str中,讀入不再進行。數(shù)組str以'\0'結尾。
1.4.3 fputc
#include <stdio.h>
int fputc(int ch, FILE *stream);
返回:成功為所寫的字符,出錯為EOF
把字符ch(轉換為unsigned char類型)輸出到流stream中。
1.4.4 fputs
#include <stdio.h>
int fputs(const char *str, FILE *stream);
返回:成功返回非負值,失敗返回EOF
把字符串str輸出到流stream中,不輸出終止符'\0'。
1.4.5 getc
#include <stdio.h>
int getc(FILE *stream);
getc()與fgetc()等價。不同之處為:當getc函數(shù)被定義為宏時,它可能多次計算stream的值。
1.4.6 getchar
#include <stdio.h>
int getchar(void);
等價于getc(stdin)。
1.4.7 gets
#include <stdio.h>
char *gets(char *str);
返回:成功為str,到達文件尾或發(fā)生錯誤則為NULL
從stdin中讀入下一個字符串到數(shù)組str中,并把讀入的換行符替換為字符'\0'。
gets()可讀入無限多字節(jié),所以要保證str有足夠的空間,防止溢出。
1.4.8 putc
#include <stdio.h>
int putc(int ch, FILE *stream);
putc()與fputc()等價。不同之處為:當putc函數(shù)被定義為宏時,它可能多次計算stream的值。
1.4.9 putchar
#include <stdio.h>
int putchar(int ch);
等價于putc(ch, stdout)。
1.4.10 puts
#include <stdio.h>
int puts(const char *str);
返回:成功返回非負值,出錯返回EOF
把字符串str和一個換行符輸出到stdout。
1.4.11 ungetc
#include <stdio.h>
int ungetc(int ch, FILE *stream);
返回:成功時為ch,出錯為EOF
把字符ch(轉換為unsigned char類型)寫回到流stream中,下次對該流進行讀操作時,將返回該字符。對每個流只保證能寫回一個字符(有些實現(xiàn)支持回退多個字符),且此字符不能是EOF。
1.5 直接輸入輸出函數(shù)
1.5.1 fread
#include <stdio.h>
size_t fread(void *buf, size_t size, size_t count, FILE *stream);
返回:實際讀入的對象數(shù)
從流stream中讀入最多count個長度為size個字節(jié)的對象,放到buf指向的數(shù)組中。
返回值可能小于指定讀入數(shù),原因可能是出錯,也可能是到達文件尾。實際執(zhí)行狀態(tài)可用feof()或ferror()確定。
1.5.2 fwrite
#include <stdio.h>
size_t fwrite(const void *buf, size_t size, size_t count, FILE *stream);
返回:實際輸出的對象數(shù)
把buf指向的數(shù)組中count個長度為size的對象輸出到流stream中,并返回被輸出的對象數(shù)。如果發(fā)生錯誤,則返回一個小于count的值。
1.6 文件定位函數(shù)
1.6.1 fseek
#include <stdio.h>
int fseek(FILE *stream, long int offset, int origin);
返回:成功為0,出錯為非0
對流stream相關的文件定位,隨后的讀寫操作將從新位置開始。
對于二進制文件,此位置被定位在由origin開始的offset個字符處。origin的值可能為SEEK_SET(文件開始處)、SEEK_CUR(當前位置)或SEEK_END(文件結束處)。
對于文本流,offset心須為0,或者是由函數(shù)ftell()返回的值(此時origin的值必須是SEEK_SET)。
1.6.2 ftell
#include <stdio.h>
long int ftell(FILE *stream);
返回與流stream相關的文件的當前位置。出錯時返回-1L。
1.6.3 rewind
#include <stdio.h>
void rewind(FILE *stream);
rewind(fp)等價于fssek(fp, 0L, SEEK_SET)與clearerr(fp)這兩個函數(shù)順序執(zhí)行的效果,即把與流stream相關的文件的當前位置移到開始處,同時清除與該流相關的文件尾標志和錯誤標志。
1.6.4 fgetpos
#include <stdio.h>
int fgetpos(FILE *stream, fpos_t *position);
返回:成功返回0,失敗返回非0
把流stream的當前位置記錄在*position中,供隨后的fsetpos()調用時使用。
1.6.5 fsetpos
#include <stdio.h>
int fsetpos(FILE *stream, const fpos_t *position);
返回:成功返回0,失敗返回非0
把流stream的位置定位到*position中記錄的位置。*position的值是之前調用fgetpos()記錄下來的。
1.7 錯誤處理函數(shù)
當發(fā)生錯誤或到達文件末尾時,標準庫中的許多函數(shù)將設置狀態(tài)指示符。這些狀態(tài)指示符可被顯式地設置和測試。另外,(定義在<errno.h>中的)整數(shù)表達式errno可包含一個出錯序號,該數(shù)將進一步給出最近一次出錯的信息。
1.7.1 clearerr
#include <stdio.h>
void clearerr(FILE *stream);
清除與流stream相關的文件結束指示符和錯誤指示符。
1.7.2 feof
#include <stdio.h>
int feof(FILE *stream);
返回:到達文件尾時返回非0值,否則返回0
與流stream相關的文件結束指示符被設置時,函數(shù)返回一個非0值。
1.7.3 ferror
#include <stdio.h>
int ferror(FILE *stream);
返回:無錯返回0,有錯返回非0
與流stream相關的文件出錯指示符被設置時,函數(shù)返回一個非0值。
1.7.4 perror
#include <stdio.h>
void perror(const char *str);
perror(s)用于輸出字符串s以及與全局變量errno中的整數(shù)值相對應的出錯信息,具體出錯信息的內容依賴于實現(xiàn)。該函數(shù)的功能類似于:
fprintf(stderr, "%s: %s\n", s, "出錯信息");
2 字符類測試<ctype.h>
頭文件<ctype.h>中說明了一些用于測試字符的函數(shù)。每個函數(shù)的變元均為int類型,變元的值必須是EOF或可用unsignedchar類型表示的字符,函數(shù)的返回值為int類型。如果變元滿足所指定的條件,那么函數(shù)返回非0值(表示真);否則返回值為0(表示假)。這些函數(shù)包括2.1~2.11。
在7位ASCII字符集中,可打印字符是從0x20(' ')到0x7E('~')之間的字符;控制字符是從0(NUL)到0x1F(US)之間的字符和字符0x7F(DEL)。
2.1 isalnum
#include <ctype.h>
int sialnum(int ch);
變元為字母或數(shù)字時,函數(shù)返回非0值,否則返回0。
2.2 isalpha
#include <ctype.h>
int isalpha(int ch);
當變元為字母表中的字母時,函數(shù)返回非0值,否則返回0。各種語言的字母表互不相同,對于英語來說,字母表由大寫和小寫的字母A到Z組成。
2.3 iscntrl
#include <ctype.h>
int iscntrl(int ch);
當變元是控制字符時,函數(shù)返回非0,否則返回0。
2.4 isdigit
#include <ctype.h>
int isdigit(int ch);
當變元是十進制數(shù)字時,函數(shù)返回非0值,否則返回0。
2.5 isgraph
#include <ctype.h>
int isgraph(int ch);
如果變元為除空格之外的任何可打印字符,則函數(shù)返回非0值,否則返回0。
2.6 islower
#include <ctype.h>
int islower(int ch);
如果變元是小寫字母,函數(shù)返回非0值,否則返回0。
2.7 isprint
#include <ctype.h>
int isprint(int ch);
如果變元是可打印字符(含空格),則函數(shù)返回非0值,否則返回0。
2.8 ispunct
#include <ctype.h>
int ispunct(int ch);
如果變元是除空格、字母和數(shù)字外的可打印字符,則函數(shù)返回非0,否則返回0。
2.9 isspace
#include <ctype.h>
int isspace(int ch);
當變元為空白字符(包括空格、換頁符、換行符、回車符、水平制表符和垂直制表符)時,函數(shù)返回非0,否則返回0。
2.10 isupper
#include <ctype.h>
int isupper(int ch);
如果變元為大寫字母,函數(shù)返回非0,否則返回0。
2.11 isxdigit
#include <ctype.h>
int isxdigit(int ch);
當變元為十六進制數(shù)字時,函數(shù)返回非0,否則返回0。
2.12 tolower
#include <string.h>
int tolower(int ch);
當ch為大寫字母時,返回其對應的小寫字母;否則返回ch。
2.13 toupper
#include <string.h>
int toupper(int ch);
當ch為小寫字母時,返回其對應的大寫字母;否則返回ch。
3 字符串函數(shù)<string.h>
在頭文件<string.h>中定義了兩組字符串函數(shù)。第一組函數(shù)的名字以str開頭;第二組函數(shù)的名字以mem開頭。只有函數(shù)memmove對重疊對象間的拷貝進行了定義,而其他函數(shù)都未定義。比較類函數(shù)將其變元視為unsigned char類型的數(shù)組。
3.1 strcpy
#include <string.h>
char *strcpy(char *str1, const char *str2);
把字符串str2(包括'\0')拷貝到字符串str1當中,并返回str1。
3.2 strncpy
#include <string.h>
char *strncpy(char *str1, const char *str2, size_t count);
把字符串str2中最多count個字符拷貝到字符串str1中,并返回str1。如果str2中少于count個字符,那么就用'\0'來填充,直到滿足count個字符為止。
3.3 strcat
#include <string.h>
char *strcat(char *str1, const char *str2);
把str2(包括'\0')拷貝到str1的尾部(連接),并返回str1。其中終止原str1的'\0'被str2的第一個字符覆蓋。
3.4 strncat
#include <string.h>
char *strncat(char *str1, const char *str2, size_t count);
把str2中最多count個字符連接到str1的尾部,并以'\0'終止str1,返回str1。其中終止原str1的'\0'被str2的第一個字符覆蓋。
注意,最大拷貝字符數(shù)是count+1。
3.5 strcmp
#include <string.h>
int strcmp(const char *str1, const char *str2);
按字典順序比較兩個字符串,返回整數(shù)值的意義如下:
- 小于0,str1小于str2;
- 等于0,str1等于str2;
- 大于0,str1大于str2;
3.6 strncmp
#include <string.h>
int strncmp(const char *str1, const char *str2, size_t count);
同strcmp,除了最多比較count個字符。根據(jù)比較結果返回的整數(shù)值如下:
- 小于0,str1小于str2;
- 等于0,str1等于str2;
- 大于0,str1大于str2;
3.7 strchr
#include <string.h>
char *strchr(const char *str, int ch);
返回指向字符串str中字符ch第一次出現(xiàn)的位置的指針,如果str中不包含ch,則返回NULL。
3.8 strrchr
#include <string.h>
char *strrchr(const char *str, int ch);
返回指向字符串str中字符ch最后一次出現(xiàn)的位置的指針,如果str中不包含ch,則返回NULL。
3.9 strspn
#include <string.h>
size_t strspn(const char *str1, const char *str2);
返回字符串str1中由字符串str2中字符構成的第一個子串的長度。
3.10 strcspn
#include <string.h>
size_t strcspn(const char *str1, const char *str2);
返回字符串str1中由不在字符串str2中字符構成的第一個子串的長度。
3.11 strpbrk
#include <string.h>
char *strpbrk(const char *str1, const char *str2);
返回指向字符串str2中的任意字符第一次出現(xiàn)在字符串str1中的位置的指針;如果str1中沒有與str2相同的字符,那么返回NULL。
3.12 strstr
#include <string.h>
char *strstr(const char *str1, const char *str2);
返回指向字符串str2第一次出現(xiàn)在字符串str1中的位置的指針;如果str1中不包含str2,則返回NULL。
3.13 strlen
#include <string.h>
size_t strlen(const char *str);
返回字符串str的長度,'\0'不算在內。
3.14 strerror
#include <string.h>
char *strerror(int errnum);
返回指向與錯誤序號errnum對應的錯誤信息字符串的指針(錯誤信息的具體內容依賴于實現(xiàn))。
3.15 strtok
#include <string.h>
char *strtok(char *str1, const char *str2);
在str1中搜索由str2中的分界符界定的單詞。
對strtok()的一系列調用將把字符串str1分成許多單詞,這些單詞以str2中的字符為分界符。第一次調用時str1非空,它搜索str1,找出由非str2中的字符組成的第一個單詞,將str1中的下一個字符替換為'\0',并返回指向單詞的指針。隨后的每次strtok()調用(參數(shù)str1用NULL代替),均從前一次結束的位置之后開始,返回下一個由非str2中的字符組成的單詞。當str1中沒有這樣的單詞時返回NULL。每次調用時字符串str2可以不同。
如:
char *p;
p = strtok("The summer soldier,the sunshine patriot", " ");
printf("%s", p);
do {
p = strtok("\0", ", "); /* 此處str2是逗號和空格 */
if (p)
printf("|%s", p);
} while (p);
顯示結果是:The | summer | soldier | the | sunshine | patriot
3.16 memcpy
#include <string.h>
void *memcpy(void *to, const void *from, size_t count);
把from中的count個字符拷貝到to中。并返回to。
3.17 memmove
#include <string.h>
void *memmove(void *to, const void *from, size_t count);
功能與memcpy類似,不同之處在于,當發(fā)生對象重疊時,函數(shù)仍能正確執(zhí)行。
3.18 memcmp
#include <string.h>
int memcmp(const void *buf1, const void *buf2, size_t count);
比較buf1和buf2的前count個字符,返回值與strcmp的返回值相同。
3.19 memchr
#include <string.h>
void *memchr(const void *buffer, int ch, size_t count);
返回指向ch在buffer中第一次出現(xiàn)的位置指針,如果在buffer的前count個字符當中找不到匹配,則返回NULL。
3.20 memset
#include <string.h>
void *memset(void *buf, int ch, size_t count);
把buf中的前count個字符替換為ch,并返回buf。
4 數(shù)學函數(shù)<math.h>
頭文件<math.h>中說明了數(shù)學函數(shù)和宏。
宏EDOM和ERANGE(定義在頭文件<errno.h>中)是兩個非0整常量,用于引發(fā)各個數(shù)學函數(shù)的定義域錯誤和值域錯誤;HUGE_VAL是一個double類型的正數(shù)。當變元取值在函數(shù)的定義域之外時,就會出現(xiàn)定義域錯誤。在發(fā)生定義域錯誤時,全局變量errno的值被置為EDOM,函數(shù)的返回值視具體實現(xiàn)而定。如果函數(shù)的結果不能用double類型表示,那么就會發(fā)生值域錯誤。當結果上溢時,函數(shù)返回HUGE_VAL并帶有正確的符號(正負號),errno的值被置為ERANGE。當結果下溢時,函數(shù)返回0,而errno是否被設置為ERANGE視具體實現(xiàn)而定。
4.1 sin
#include <math.h>
double sin(double arg);
返回arg的正弦值,arg單位為弧度。
4.2 cos
#include <math.h>
double cos(double arg);
返回arg的余弦值,arg單位為弧度。
4.3 tan
#include <math.h>
double tan(double arg);
返回arg的正切值,arg單位為弧度。
4.4 asin
#include <math.h>
double asin(double arg);
返回arg的反正弦值sin-1(x),值域為[-pi/2,pi/2], 其中變元范圍[-1,1]。
4.5 acos
#include <math.h>
double acos(double arg);
返回arg的反余弦值cos-1(x),值域為[0,pi], 其中變元范圍[-1,1]。
4.6 atan
#include <math.h>
double atan(double arg);
返回arg的反正切值tan-1(x),值域為[-pi/2,pi/2]。
4.7 atan2
#include <math.h>
double atan2(double a, double b);
返回a/b的反正切值tan-1(a/b),值域為[-pi,pi]。
4.8 sinh
#include <math.h>
double sinh(double arg);
返回arg的雙曲正弦值。
4.9 cosh
#include <math.h>
double cosh(double arg);
返回arg的雙曲余弦值。
4.10 tanh
#include <math.h>
double tanh(double arg);
返回arg的雙曲正切值。
4.11 exp
#include <math.h>
double exp(double arg);
返回冪函數(shù)ex。
4.12 log
#include <math.h>
double log(double arg);
返回自然對數(shù)ln(x),其中變元范圍arg > 0。
4.13 log10
#include <math.h>
double log10(double arg);
返回以10為底的對數(shù)log10(x),其中變元范圍arg > 0。
4.14 pow
#include <math.h>
double pow(double x, double y);
返回xy,如果x=0且y<=0或者如果x<0且y不是整數(shù),那么產生定義域錯誤。
4.15 sqrt
#include <math.h>
double sqrt(double arg);
返回arg的平方根,其中變元范圍arg>=0。
4.16 ceil
#include <math.h>
double ceil(double arg);
返回不小于arg的最小整數(shù)。
4.17 floor
#include <math.h>
double floor(double arg);
返回不大于arg的最大整數(shù)。
4.18 fabs
#include <math.h>
double fabs(double arg);
返回arg的絕對值|x|。
4.19 ldexp
#include <math.h>
double ldexp(double num, int exp);
返回num * 2exp。
4.20 frexp
#include <math.h>
double frexp(double num, int *exp);
把num分成一個在[1/2,1)區(qū)間的真分數(shù)和一個2的冪數(shù)。將真分數(shù)返回,冪數(shù)保存在*exp中。如果num等于0,那么這兩部分均為0。
4.21 modf
#include <math.h>
double modf(double num, double *i);
把num分成整數(shù)和小數(shù)兩部分,兩部分均與num有同樣的正負號。函數(shù)返回小數(shù)部分,整數(shù)部分保存在*i中。
4.22 fmod
#include <math.h>
double fmod(double a, double b);
返回a/b的浮點余數(shù),符號與a相同。如果b為0,那么結果由具體實現(xiàn)而定。
5 實用函數(shù)<stdlib.h>
在頭文件<stdlib.h>中說明了用于數(shù)值轉換、內存分配以及具有其他相似任務的函數(shù)。
5.1 atof
#include <stdlib.h>
double atof(const char *str);
把字符串str轉換成double類型。等價于:strtod(str, (char**)NULL)。
5.2 atoi
#include <stdlib.h>
int atoi(const char *str);
把字符串str轉換成int類型。等價于:(int)strtol(str, (char**)NULL, 10)。
5.3 atol
#include <stdlib.h>
long atol(const char *str);
把字符串str轉換成long類型。等價于:strtol(str, (char**)NULL, 10)。
5.4 strtod
#include <stdlib.h>
double strtod(const char *start, char **end);
把字符串start的前綴轉換成double類型。在轉換中跳過start的前導空白符,然后逐個讀入構成數(shù)的字符,任何非浮點數(shù)成分的字符都會終止上述過程。如果end不為NULL,則把未轉換部分的指針保存在*end中。
如果結果上溢,返回帶有適當符號的HUGE_VAL,如果結果下溢,那么函數(shù)返回0。在這兩種情況下,errno均被置為ERANGE。
5.5 strtol
#include <stdlib.h>
long int strtol(const char *start, char **end, int radix);
把字符串start的前綴轉換成long類型,在轉換中跳過start的前導空白符。如果end不為NULL,則把未轉換部分的指針保存在*end中。
如果radix的值在2到36間之間,那么轉換按該基數(shù)進行;如果radix為0,則基數(shù)為八進制、十進制、十六進制,以0為前導的是八進制,以0x或0X為前導的是十六進制。無論在哪種情況下,串中的字母是表示10到radix-1之間數(shù)字的字母。如果radix是16,可以加上前導0x或0X。
如果結果上溢,則依據(jù)結果的符號返回LONG_MAX或LONG_MIN,置errno為ERANGE。
5.6 strtoul
#include <stdlib.h>
unsigned long int strtoul(const char *start, char **end, int radix);
與strtol()類似,只是結果為unsigned long類型,溢出時值為ULONG_MAX。
5.7 rand
#include <stdlib.h>
int rand(void);
產生一個0到RAND_MAX之間的偽隨機整數(shù)。RAND_MAX值至少為32767。
5.8 srand
#include <stdlib.h>
void srand(unsigned int seed);
設置新的偽隨機數(shù)序列的種子為seed。種子的初值為1。
5.9 calloc
#include <stdlib.h>
void *calloc(size_t num, size_t size);
為num個大小為size的對象組成的數(shù)組分配足夠的內存,并返回指向所分配區(qū)域的第一個字節(jié)的指針;如果內存不足以滿足要求,則返回NULL。
分配的內存區(qū)域中的所有位被初始化為0。
5.10 malloc
#include <stdlib.h>
void *malloc(size_t size);
為大小為size的對象分配足夠的內存,并返回指向所分配區(qū)域的第一個字節(jié)的指針;如果內存不足以滿足要求,則返回NULL。
不對分配的內存區(qū)域進行初始化。
5.11 realloc
#include <stdlib.h>
void *realloc(void *ptr, size_t size);
將ptr指向的內存區(qū)域的大小改為size個字節(jié)。如果新分配的內存比原內存大,那么原內存的內容保持不變,增加的空間不進行初始化。如果新分配的內存比原內存小,那么新內存保持原內存區(qū)中前size字節(jié)的內容。函數(shù)返回指向新分配空間的指針。如果不能滿足要求,則返回NULL,原ptr指向的內存區(qū)域保持不變。
如果ptr為NULL,則行為等價于malloc(size)。
如果size為0,則行為等價于free(ptr)。
5.12 free
#include <stdlib.h>
void free(void *ptr);
釋放ptr指向的內存空間,若ptr為NULL,則什么也不做。ptr必須指向先前用動態(tài)分配函數(shù)malloc、realloc或calloc分配的空間。
5.13 abort
#include <stdlib.h>
void abort(void);
使程序非正常終止。其功能類似于raise(SIGABRT)。
5.14 exit
#include <stdlib.h>
void exit(int status);
使程序正常終止。atexit函數(shù)以與注冊相反的順序被調用,所有打開的文件被刷新,所有打開的流被關閉。status的值如何被返回依具體的實現(xiàn)而定,但用0表示正常終止,也可用值EXIT_SUCCESS和EXIT_FAILURE。
5.15 atexit
#include <stdlib.h>
int atexit(void (*func)(void));
注冊在程序正常終止時所要調用的函數(shù)func。如果成功注冊,則函數(shù)返回0值,否則返回非0值。
5.16 system
#include <stdlib.h>
int system(const char *str);
把字符串str傳送給執(zhí)行環(huán)境。如果str為NULL,那么在存在命令處理程序時,返回0值。如果str的值非NULL,則返回值與具體的實現(xiàn)有關。
5.17 getenv
#include <stdlib.h>
char *getenv(const char *name);
返回與name相關的環(huán)境字符串。如果該字符串不存在,則返回NULL。其細節(jié)與具體的實現(xiàn)有關。
5.18 bsearch
#include <stdlib.h>
void *bsearch(const void *key, const void *base, size_t n, size_t size,\
int (*compare)(const void *, const void *));
在base[0]...base[n-1]之間查找與*key匹配的項。size指出每個元素占有的字節(jié)數(shù)。函數(shù)返回一個指向匹配項的指針,若不存在匹配則返回NULL。
函數(shù)指針compare指向的函數(shù)把關鍵字key和數(shù)組元素比較,比較函數(shù)的形式為:
int func_name(const void *arg1, const void *arg2);
arg1是key指針,arg2是數(shù)組元素指針。
返回值必須如下:
- arg1 < arg2時,返回值<0;
- arg1 == arg2時,返回值==0;
- arg1 > arg2時,返回值>0。
數(shù)組base必須按升序排列(與compare函數(shù)定義的大小次序一致)。
5.19 qsort
#include <stdlib.h>
void qsort(void *base, size_t n, size_t size, \
int (*compare)(const void *, const void *));
對由n個大小為size的對象構成的數(shù)組base進行升序排序。
比較函數(shù)compare的形式如下:
int func_name(const void *arg1, const voie *arg2);
其返回值必須如下所示:
- arg1 < arg2,返回值<0;
- arg1 == arg2,返回值==0;
- arg1 > arg2,返回值>0。
5.20 abs
#include <stdlib.h>
int abs(int num);
返回int變元num的絕對值。
5.21 labs
#include <stdlib.h>
long labs(long int num);
返回long類型變元num的絕對值。
5.22 div
#include <stdlib.h>
div_t div(int numerator, int denominator);
返回numerator/denominator的商和余數(shù),結果分別保存在結構類型div_t的兩個int成員quot和rem中。
5.23 ldiv
#include <stdlib.h>
ldiv_t div(long int numerator, long int denominator);
返回numerator/denominator的商和余數(shù),結果分別保存在結構類型ldiv_t的兩個long成員quot和rem中。
6 診斷<assert.h>
6.1 assert
#include <assert.h>
void assert(int exp);
assert宏用于為程序增加診斷功能。當assert(exp)執(zhí)行時,如果exp為0,則在標準出錯輸出流stderr輸出一條如下所示的信息:
Assertion failed: expression, file filename, line nnn
然后調用abort終止執(zhí)行。其中的源文件名filename和行號nnn來自于預處理宏__FILE__和__LINE__。
如果<assert.h>被包含時定義了宏NDEBUG,那么宏assert被忽略。
7 變長變元表<stdarg.h>
頭文件<stdarg.h>中的說明提供了依次處理含有未知數(shù)目和類型的函數(shù)變元表的機制。
7.1 va_start
7.2 va_arg
7.3 va_end
#include <stdarg.h>
void va_start(va_list ap, lastarg);
type va_arg(va_list ap, type);
void va_end(va_list ap);
假設函數(shù)f含有可變數(shù)目的變元,lastarg是它的最后一個有名參數(shù),然后在f內說明一個類型為va_list的變量ap,它將依次指向每個變元:
va_list ap;
在訪問任何未命名的變元前必須用va_start宏對ap進行初始化:
va_start(ap, lastarg);
此后,宏va_arg的每次執(zhí)行將產生一個與下一個未命名的變元有相同類型和值的值,它同時還修改ap,以使下一次使用va_arg時返回下一個變元:
va_arg(ap, type);
當所有的變元處理完畢之后,f返回之前,必須調用一次宏va_end:
va_end(ap);
例子:函數(shù)sum_series()的第一個參數(shù)是變元項數(shù)。
double sum_series(int num, … )
{
double sum = 0.0, t;
va_list ap;
va_start(ap, num);
for (; num; num--) {
t = va_arg(ap, double);
sum += t;
}
va_end(ap);
return sum;
}
8 非局部跳轉<setjmp.h>
頭文件<setjmp.h>中的說明提供了一種避免通常的函數(shù)調用和返回順序的途徑,特別的,它允許立即從一個多層嵌套的函數(shù)調用中返回。
8.1 setjmp
#include <setjmp.h>
int setjmp(jmp_buf env);
setjmp()宏把當前狀態(tài)信息保存到env中,供以后longjmp()恢復狀態(tài)信息時使用。如果是直接調用setjmp(),那么返回值為0;如果是由于調用longjmp()而調用setjmp(),那么返回值非0。setjmp()只能在某些特定情況下調用,如在if語句、switch語句及循環(huán)語句的條件測試部分以及一些簡單的關系表達式中。
8.2 longjmp
#include <setjmp.h>
void longjmp(jmp_buf env, int val);
longjmp()用于恢復由最近一次調用setjmp()時保存到env的狀態(tài)信息。當它執(zhí)行完時,程序就象setjmp()剛剛執(zhí)行完并返回非0值val那樣繼續(xù)執(zhí)行。包含setjmp()宏調用的函數(shù)一定不能已經終止。所有可訪問的對象的值都與調用longjmp()時相同,唯一的例外是,那些調用setjmp()宏的函數(shù)中的非volatile自動變量如果在調用setjmp()后有了改變,那么就變成未定義的。
9 信號處理<signal.h>
頭文件<signal.h>中提供了一些用于處理程序運行期間所引發(fā)的異常條件的功能,如處理來源于外部的中斷信號或程序執(zhí)行期間出現(xiàn)的錯誤等事件。
9.1 signal
#include <signal.h>
void (*signal(int sig, void (*handler)(int)))(int);
signal()用于確定以后當信號sig出現(xiàn)時的處理方法。如果handler的值是SIG_DFL,那么就采用實現(xiàn)定義的缺省行為;如果handler的值是SIG_IGN,那么就忽略該信號;否則,調用handler所指向的函數(shù)(參數(shù)為信號類型)。有效的信號包括:
SIGABRT | 異常終止,如調用abort()。 |
SIGFPE | 算術運算出錯,如除數(shù)為0或溢出。 |
SIGILL | 非法函數(shù)映象,如非法指令。 |
SIGINT | 交互式信號,如中斷。 |
SIGSEGV | 非法訪問存儲器,如訪問不存在的內存單元。 |
SIGTERM | 發(fā)送給本程序的終止請求信號。 |
signal()返回信號sig原來的的handler;如果出錯,則返回SIG_ERR。
當隨后出現(xiàn)信號sig時,就中斷正在執(zhí)行的操作,轉而執(zhí)行信號處理函數(shù)(*handler)(sig)。如果從信號處理程序中返回,則從中斷的位置繼續(xù)執(zhí)行。
信號的初始狀態(tài)由實現(xiàn)定義。
9.2 raise
#include <signal.h>
int raise(int sig);
向程序發(fā)送信號sig。如果發(fā)送不成功,就返回一個非0值。
10 日期與時間函數(shù)<time.h>
頭文件<time.h>中說明了一些用于處理日期和時間的類型和函數(shù)。其中的一部分函數(shù)用于處理當?shù)貢r間,因為時區(qū)等原因,當?shù)貢r間與日歷時間可能不相同。clock_t和time_t是兩個用于表示時間的算術類型,而structtm則用于存放日歷時間的各個成分。tm的各個成員的用途及取值范圍如下:
int tm_sec; /* 秒,0~61 */
int tm_min; /* 分,0~59 */
int tm_hour; /* 時,0~23 */
int tm_mday; /* 日,1~31 */
int tm_mon; /* 月(從1月開始),0~11 */
int tm_year; /* 年(從1900年開始) */
int tm_wday; /* 星期(從周日開始),0~6 */
int tm_yday; /* 天數(shù)(從1月1日開始),0~365 */
int tm_isdst; /* 夏令時標記 */
其中,tm_isdst在使用夏令時時其值為正,在不使用夏令時時其值為0,如果該信息不能使用,其值為負。
10.1 clock
#include <time.h>
clock_t clock(void);
返回程序自開始執(zhí)行到目前為止所占用的處理機時間。如果處理機時間不可使用,那么返回-1。clock()/CLOCKS_PER_SEC是以秒為單位表示的時間。
10.2 time
#include <time.h>
time_t time(time_t *tp);
返回當前日歷時間。如果日歷時間不能使用,則返回-1。如果tp不為NULL,那么同時把返回值賦給*tp。
10.3 difftime
#include <time.h>
double difftime(time_t time2, time_t time1);
返回time2-time1的值(以秒為單位)。
10.4 mktime
#include <time.h>
time_t mktime(struct tm *tp);
將結構*tp中的當?shù)貢r間轉換為time_t類型的日歷時間,并返回該時間。如果不能轉換,則返回-1。
10.5 asctime
#include <time.h>
char *asctime(const struct tm *tp);
將結構*tp中的時間轉換成如下所示的字符串形式:
day month date hours:minutes:seconds year\n\0
如:
Fri Apr 15 15:14:13 2005\n\0
返回指向該字符串的指針。字符串存儲在可被其他調用重寫的靜態(tài)對象中。
10.6 ctime
#include <time.h>
char *ctime(const time_t *tp);
將*tp中的日歷時間轉換為當?shù)貢r間的字符串,并返回指向該字符串指針。字符串存儲在可被其他調用重寫的靜態(tài)對象中。等價于如下調用:
asctime(localtime(tp))
10.7 gmtime
#include <time.h>
struct tm *gmtime(const time_t *tp);
將*tp中的日歷時間轉換成struct tm結構形式的國際標準時間(UTC),并返回指向該結構的指針。如果轉換失敗,返回NULL。結構內容存儲在可被其他調用重寫的靜態(tài)對象中。
10.8 localtime
#include <time.h>
struct tm *localtime(const time_t *tp);
將*tp中的日歷時間轉換成struct tm結構形式的本地時間,并返回指向該結構的指針。結構內容存儲在可被其他調用重寫的靜態(tài)對象中。
10.9 strftime
#include <time.h>
size_t strftime(char *s, size_t smax, const char *fmt, \
const struct tm *tp);
根據(jù)fmt的格式說明把結構*tp中的日期與時間信息轉換成指定的格式,并存儲到s所指向的數(shù)組中,寫到s中的字符數(shù)不能多于smax。函數(shù)返回實際寫到s中的字符數(shù)(不包括'\0');如果產生的字符數(shù)多于smax,則返回0。
fmt類似于printf()中的格式說明,它由0個或多個轉換規(guī)格說明與普通字符組成。普通字符原封不動的拷貝到s中,每個%c按照下面所描述的格式用與當?shù)丨h(huán)境相適應的值來替換。轉換規(guī)格列表如下:
格式 | 說明 |
%a | 一星期中各天的縮寫名 |
%A | 一星期中各天的全名 |
%b | 縮寫月份名 |
%B | 月份全名 |
%c | 當?shù)貢r間和日期表示 |
%d | 用整數(shù)表示的一個月中的第幾天(01~31) |
%H | 用整數(shù)表示的時(24小時制,00~23) |
%I | 用整數(shù)表示的時(12小時制,01~12) |
%j | 用整數(shù)表示的一年中各天(001~366) |
%m | 用整數(shù)表示的月份(01~12) |
%M | 用整數(shù)表示的分(00~59) |
%p | 與AM/PM對應的當?shù)乇硎痉椒?/td> |
%S | 用整數(shù)表示的秒(00~61) |
%U | 用整數(shù)表示一年中的星期數(shù)(00~53,將星期日看作為每周的第一天) |
%w | 用整數(shù)表示一周中的各天(0~6,星期日為0) |
%W | 用整數(shù)表示一年中的星期數(shù)(00~53,將星期一看作為每周的第一天) |
%x | 當?shù)厝掌诒硎?/td> |
%X | 當?shù)貢r間表示 |
%y | 不帶公元的年(00~99) |
%Y | 完整年份表示 |
%Z | 時區(qū)名字(可獲得時) |
%% | %本身 |
11 由實現(xiàn)定義的限制<limits.h>和<float.h>
頭文件<limits.h>中定義了用于表示整類型大小的常量。以下所列的值是可接受的最小值,實際系統(tǒng)中可能有更大的值。
CHAR_BIT | 8 | char類型的位數(shù) |
CHAR_MAX | UCHAR_MAX或SCHAR_MAX | char類型的最大值 |
CHAR_MIN | 0或SCHAR_MIN | char類型的最小值 |
INT_MAX | 32767 | int類型的最大值 |
INT_MIN | -32767 | int類型的最小值 |
LONG_MAX | 2147483647 | long的最大值 |
LONG_MIN | -2147483647 | long類型的最小值 |
SCHAR_MAX | +127 | signed char類型的最大值 |
SCHAR_MIN | -127 | signed char類型的最小值 |
SHRT_MAX | +32767 | short類型的最大值 |
SHRT_MIN | -32767 | short類型的最小值 |
UCHAR_MAX | 255 | unsigned char類型的最大值 |
UINT_MAX | 65535 | unsigned int類型的最大值 |
ULONG_MAX | 4294967295 | unsigned long的最大值 |
USHRT_MAX | 65535 | unsigned short的最大值 |
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請
點擊舉報。