1. 程式人生 > >(轉載)C語言中常用的幾個標頭檔案及庫函式 (stdio.h ,string.h ,math.h ,stdlib.h)

(轉載)C語言中常用的幾個標頭檔案及庫函式 (stdio.h ,string.h ,math.h ,stdlib.h)

不完全統計,C語言標準庫中的標頭檔案有15個之多,所以我主要介紹常用的這四個標頭檔案stdio.h ,string.h ,math.h ,stdlib.h ,以後用到其他的再做補充。下面上乾貨:

1.<stdio.h>:定義了輸入輸出函式、型別以及巨集,函式幾乎佔了標準庫的1/3。

(1)檔案訪問。

1

FILE *fopen(“filename”,“mode”):

以mode模式開啟地址為'filename'的檔案,並返回檔案指標。

訪問模式主要是“r”:只讀;   “w” :只寫,並刪除已有內容;  “a”:追加,在末尾追加;

 “r+”, “w+”:讀寫; “a+”追加,上述結尾加“b”:二進位制檔案操作。

注意:其中r是開啟檔案,而w會建立(如果檔案不存在);  w會覆蓋原有內容,a則是在原有檔案末尾追加。

1

int fcloseFILE *f):

釋放緩衝區資料,關閉流。

下面兩個沒太用過:

1

FILE *freopen(“filename”,“mode”,FILE * f):

以mode模式開啟地址為'filename'的檔案,並將該檔案與流f2關聯。

1

int fflushFILE *f):

將已寫到緩衝區但未寫入檔案中的所有資料寫入檔案中。

(2)

二進位制輸入/輸出

1

fread(*ptr,size,n,FILE* f):

從f中讀取n個長度為size的物件,並放入ptr指向的陣列中。

1

fwrite(*ptr,size,n,FILE* f):

從ptr指向陣列中讀取n個長度為size的物件,並寫入f中。

注意:要注意write與read的物件,讀和寫都是針對檔案流f的。

(3)非格式化輸入/輸出

1

int fgetc/getcFILE *f):

返回流f的下一個字元,到達檔案末尾/發生錯誤,則返回EOF。

1

int fputc/putcint c, FILE *f)

將字元c輸入到流f中。

1

int fgetschar * s,int n,FILE *f):

將f中下n-1個字元讀入到陣列s中。遇到換行符,則終止。

1

int fputsconst char * s,FILE *f):

將字串s輸出到流中。

1

int ungetint c, FILE *f)

將c寫回到f中。

(4)格式化輸入/輸出

按一定格式轉輸出。

1

2

scanf/fscanf/sscanf

printf/fprintf/sprintf

注意:不加f/s,則是格式字串標準輸入/出函式,輸入/出到終端/螢幕;printf(const char *format,...)

加s,輸入/出到字串中。sprintf(char *s,const char *format,...)

加f,輸入/出到檔案流中。  fprintf(FILE *f,const char *format,...)

(5)檔案定位

1

long ftellFILE *f):

返回當前指標位置。錯誤時返回-1L。

1

int fseekFILE *f,long offset,int origin):

將當前流f指標位置設定到:origin後offset個字元處。origin有:SEEK_SET:檔案起始位置;SEEK_CUR指標當前位置,SEEK_END:檔案結束位置。

1

void rewindFILE *f)

指標返回檔案開始位置,相當於:fseek(f,0L,SEEK_SET)

不常用:

1

int fgetposFILE *f,*p)

將指標當前位置記錄到*p中,以供fsetpos函式使用。

1

int fsetposFILE *f,const *p)

指標位置指向*p。

(6)錯誤處理與檔案操作

1

int feofFILE *f)

指示檔案結束,一直返回0,結束時返回非0值。

1

int ferrorFILE *f)

如果設定了與f相關的錯誤指示符,則返回一個非0值。

1

int removechar *filename)

刪除指定位置的檔案。

1

int renameconst char *oldname,const char *newname)

改檔名,否則返回非0值。

1

FILE *tmpfilevoid

建立臨時檔案,‘wb+'模式,在被關閉或程式正常結束時自動刪除

2.<string.h> 分成兩組,一組str開頭,一組mem開頭(該組函式在<memory.h>中也有定義,不是所有編譯器都有)

(1)str

1

char * strcpy (char *dest, const char *src);

將字串src複製到字串dest中(包括'\0'),返回dest

1

char * strncpy (char *dest, const char *src,n);

將src中的前n個字元複製到dest中,返回dest,不夠n個則補‘\0'

1

2

char * strcat (char *dest, const char *src);

char * strncat (char *dest, const char *src,n);

src連線到dest後;src 中前n個字元連線到dest後。

1

2

3

4

int  strcmp (const char *s1, const char *s2);

int  strncmp (const char *s1, const char *s2,n); 比較s1與s2,s1<s2則返回負數,否則返回0;比較前n個字元

char * strchr (const char *s, int c);

char * strrchr (const char *s, int c); 返回字串s中第一次出現字元c的位置指標;返回字串s中最後一次出現字元c的位置指標(c會轉換成char

不常見 size_t   strcspn (const char *s1, const char *s2); char * strdup (const char *s); char * strerror(int errnum);

(2)mem

1

void *memcpyvoid *s, const void *ct,n)

將字串ct中的前n個字元拷貝到s中,並返回s。

1

2

void *memmove(s,ct,n)同上一函式,只是在物件重疊時仍能正確執行。

void *memsetvoid *s,int c, n)

void *memset(void *s, int c, size_t n);

函式解釋:將s中當前位置後面的n個位元組 (typedef unsigned int size_t )用 c 替換並返回 s 。

memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體陣列進行清零操作的一種最快方法 [1]。

memset()函式原型是extern void *memset(void *buffer, int c, int count) buffer:為指標或是陣列,c:是賦給buffer的值,count:是buffer的長度

將s中的前n個字元替換成c,並返回s。

1

int memcmp(cs,ct,n)

將cs前n個字元與ct進行比較,cs<ct,返回負數;否則返回0

1

void *memchr(cs,c,n)

返回指向c在cs中第一次出現的位置指標。

3.<math.h>一些數學函式

求絕對值

1

2

3

int abs  (int x);

long labs (long x);

float fabs float x):

所有返回值均為double,三角函式角度用弧度表示,x,y均為double

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

double acos (x);

double asin (x);

double atan (x);

double atan2 (y, x):  arctan(y/x)

double tan  (x);

double tanh (x):    雙曲正切

double sin  (x);

double sinh (x);

double cos  (x);

double cosh (x);

double pow  (x, y);//注意返回值型別為雙精度型

double sqrt (x);

double ceil (x):   不小於x的最小整型數(向上取整)

double floor (x):  不大於x的最大整型數(向下取整)

double exp  (x);

double fabs (x);

double log  (x):  ln(x)

double log10 (x);

double fmod (x, y):    x/y的餘數

double ldexp (x, n):         x*2^n

double modf (x, double *ip):   將x分成整數與小數兩部分,返回小數部分,整數部分放在*ip中

double frexp (x, int *exp);    將x分成(0.5,1)之間的一個真分數和一個2的冪數,返回真分數,冪數放在exp

4.<stdlib.h>數值轉換、記憶體分配等問題。

1

int randvoid

產生一個0~32767之間的隨機整數。

指標名=(資料型別  *)calloc(n,size)

分配n個長度為size的連續空間,並且將所有元素置零,返回首地址。

指標名=(資料型別  *)malloc(n*size)

分配n*size個位元組的記憶體,並返回首地址。

指標名p1=(資料型別  *)realloc(要改變記憶體大小的指標名p2,新的大小n)

分配長度為n位元組的空間,將p2值賦值到該記憶體中,返回首地址到p1.(改變p1指向地址的記憶體大小)

1

void free(*p)

釋放p指向的記憶體(p為malloc,realloc,calloc所開闢的記憶體)

1

void abortvoid

使程式非正常終止。

1

void exitint status)

使程式正常終止。

總結

以上所述是小編給大家介紹的C語言中常用的幾個標頭檔案及庫函式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對指令碼之家網站的支援!