C C 學習筆記30 C標準庫函式

2021-06-23 09:32:20 字數 3625 閱讀 2403

在說到字串的時候,提到了很多字串處理函式,尤其是strcpy函式的運用最為廣泛,本節將詳細的分析下幾個常用的標準庫函式,在將給程式設計帶來極大的方便。而c的面試題中經常性會出現對標準庫函式的熟練運用。

e.g.1編寫乙個函式,作用是把乙個char組成的字串迴圈右移n個。比如原來是「abcdefghi」,如果n=2,移動後應該是「hiabcdefg」。

函式頭是這樣的:

//pstr是指向以'\0'結尾的字串的指標

//steps是要求移動的n

void loopmove(char *pstr,int steps)

解決這個問題之前我們還是來總結一下常見的標準庫函式以及它的原型:

標準標頭檔案包括:

在根據這些標頭檔案我們再來總結下常見的一些函式:

(1)輸入輸出函式(stdio.h)

關於輸入輸出函式,我們在c檔案系統這一節基本都提到了:

(2)數學函式(math.h)

這裡面主要提供了一些數學的函式運算,大體上可以分為三類:三角函式(反三角函式)、指數(冪)函式、基本運算函式

三角函式:

三角函式

sincos

tan反三角函式

asin

acos

atan

雙曲函式

sinh

cosh

tanh

指數和對數函式:

以e為底的指數函式

exp自然對數函式

log以10為底的對數函式

log10

其他函式:

平方根sqrt

絕對值fabs

乘冪,第乙個引數作為底,第二個是指數

double pow(double, double)

實數的餘數,兩個引數分別是被除數和除數

double fmod(double, double)

注意:上面的都是取乙個引數,且返回值是double型別的。

另外關於fabs與abs的區別:

fabs的函式原型:

extern float fabs(float x);
abs的函式原型:abs(x);//是針對整數的

(3)字串處理函式()

關於字元處理函式,在之前的字串處理函式中基本已提及,其中的strcpy函式是經常性使用的。見:

但是除了已經提及的,在字串處理函式中經常性用到的一些關於儲存區操作的也是必須要掌握的。

在有一些字元陣列的操作函式(儲存區操作),名字是以mem開頭的,它的方式更加高效。在下面原型中,引數s和

t的型別是

(void*),cs

和ct的型別是

(const void *),n

的型別是

size_t,c

的型別是

int**換為

unsigned char

)。

void *memcpy(s,ct.,n);//從ct處複製n個字元到s中,返回s

vodi *memmove(s,ct,n);//從ct處複製n個字元到s中,返回s,且二者允許重疊

int *memcmp(cs,ct,n);//比較由cs、ct開始的n個字元,返回值分別可以正值、0、負值

void *memchr(cs,c,n);//在n個字元範圍內,查詢c在cs中第一次出現。如果找到返回位置的指標值

void *memset(s,c,n);//將s的前n個字元全部置為c

注意:在strlen和strcpy兩個函式考察中,經常會出現陣列越界的問題。因此這裡需要注意幾個問題:

(1)使用strcpy函式的時候一定要注意前面數碼的陣列大小必須大於後面字串的大小,否則會訪問越界。  

(2)字元陣列和字串的最明顯區別是字串會預設地加上結束符 

(3)字元陣列並不要求最後乙個字元為'\0'。是否加上完全由系統決定。但是字元陣列的初始化要求最後乙個字元必須為』\0『。    

(4)strlen函式得到字串除了結束符外的長度。

(4)字元處理函式()

見下表:

int isalpha(c)

c是字母字元

int isdigit(c)

c是數字字元

int isalnum(c)

c是字母或數字字元

int isspace(c)

c是空格、製表符、換行符

int isupper(c)

c是大寫字母

int islower(c)

c是小寫字母

int iscntrl(c)

c是控制字元

int isprint(c)

c是可列印字元,包括空格

int isgraph(c)

c是可列印字元,不包括空格

int isxdigit(c)

c是十六進製制數字字元

int ispunct(c)

c是標點符號

int tolower(int c)

當c是大寫字母時返回對應小寫字母,否則返回c本身

int toupper(int c)

當c是小寫字母時返回對應大寫字母,否則返回c本身

(5)功能函式()

動態儲存分配函式:

void *malloc(size_t size);//動態分配size個單位的空間 

void *calloc(size_t n,size_t size);//分配足以存放n個大小為size的物件,並將所有位元組用0填充,返回該儲存塊的位址

void *realloc(void *p,size_t size);//將p所指的儲存塊調整為大小為size,返回新塊的位址

void free(*p);//釋放當前所指

(6)錯誤資訊()

定義了乙個int型別的表示式errno,可以看作乙個變數,其初始值為0,一些標準庫函式執行中出錯時將它設為非0值,但任何標準庫函式都設定它為0。

裡還定義了兩個巨集edom和erange,都是非0的整數值。數學函式執行中遇到引數錯誤,就會將errno置為edom,如出現值域錯誤就會將errno置為erange。

另外一些標準庫函式,隨著學習的過程會不斷陸續增加。

現在再來分析這個問題:

e.g.1編寫乙個函式,作用是把乙個char組成的字串迴圈右移n個。比如原來是「abcdefghi」,如果n=2,移動後應該是「hiabcdefg」。

函式頭是這樣的:

//pstr是指向以'\0'結尾的字串的指標

//steps是要求移動的n

void loopmove(char *pstr,int steps)

分析:這其實就是堆標準庫函式的熟練使用,尤其是strcpy、memcpy、memset

解答1:

void loopmove(char *pstr,int steps)

C 標準庫函式

有許多不同的案件中,陣列排序的可能是有用的。演算法 如搜尋看看一些存在於乙個陣列 通常可以變得更簡單和 或更有效時,輸入的資料進行排序。此外,排序是非常有用的可讀性,如當列印列表按字母順序排列的名字。排序通常是通過反覆比較的陣列元素對進行的,和交換他們如果他們滿足一些標準。為了在這些元素進行比較根據...

C 標準庫函式

c 程式通常可以呼叫標準c 庫中的大量函式。這些函式完成一些基本的服務,如輸入和輸出等,同時也為一些經常使用的操作提供了高效的 實現 這些函式中含有大量的函式和類定義,以幫助程式設計師更好地使用標準c 庫。標準c 庫包含以下內容 和 標準c 庫的詳細訊息均在其對應的標頭檔案進行了說明。主要標準c 庫...

c標準庫函式 system

宣告 int system const char command command為請求執行的shell命令構成的字元陣列。使用 char command 50 strcpy command,ls l 列出 unix 機上當前目錄下所有的檔案和目錄 int status system command ...