慢慢總結C語言一些常用函式
標頭檔案: #include <stdio.h>
函式原型:char *fgets(char *s, int size, FILE *stream);
返回值: 成功時s指向哪返回的指標就指向哪,出錯或者讀到檔案末尾時返回NULL。
說明: fgets從指定的檔案中讀一行字元到呼叫者提供的緩衝區中。
gets
標頭檔案: #include <stdio.h>
函式原型:char *gets(char *s);
返回值: 成功時s指向哪返回的指標就指向哪,出錯或者讀到檔案末尾時返回NULL。
說明: gets從標準輸入讀一行字元到呼叫者提供的緩衝區中。
popen
標頭檔案: #include <stdio.h>
函式原型:FILE * popen(const char *command , const char *type );
返回值: 如果呼叫fork()或pipe()失敗,或者不能分配記憶體將返回NULL,否則返回標準I/O流。
popen()沒有為記憶體分配失敗設定errno值。
如果呼叫fork()或pipe()時出現錯誤errno被設為相應的錯誤型別。
如果type引數不合法,errno將返回EINVAL。
說明: popen()函式通過建立一個管道,呼叫fork()產生一個子程序,
執行一個shell以執行命令來開啟一個程序。
這個管道必須由pclose()函式關閉,而不是fclose()函式。
pclose()函式關閉標準I/O流,等待命令執行結束,然後返回shell的終止狀態。
如果shell不能被執行,則pclose()返回的終止狀態與shell已執行exit一樣。
type引數只能是讀或寫中的一種,得到的返回值(標準I/O流)也具有和type相應的只讀或只寫型別。
如果type是"r"則檔案指標連線到command的標準輸出;
如果type是"w"則檔案指標連線到command的標準輸入。
command引數是一個指向以NULL結束的shell命令字串的指標。
這行命令將被傳到bin/sh並使用-c標誌,shell將執行這個命令。
popen()的返回值是個標準I/O流,必須由pclose終止。而這個流是單向的(只能用於讀或寫)。
向這個流寫內容相當於寫入該命令的標準輸入,命令的標準輸出 和呼叫popen()的程序相同;
與之相反的,從流中讀資料相當於讀取命令的標準輸出,命令的標準輸入和呼叫popen()的程序相同。
pclose
標頭檔案: #include <stdio.h>
函式原型:int pclose(FILE *stream);
返回值: 若成功返回shell的終止狀態(也即子程序的終止狀態),若出錯返回-1,錯誤原因存於errno中。
說明: 見"popen"說明。
strlen
標頭檔案: #include <string.h>
函式原型:extern int strlen(char *s);
返回值: 返回s的長度,不包括結束符NULL。
說明: 計算字串s的(unsigned int型)長度。
atof
標頭檔案: #include <stdlib.h>
函式原型:double atof(const char* str);
返回值: 返回轉換後的浮點數;如果字串 str 不能被轉換為 double,那麼返回 0.0。
說明: atof() 的名字來源於 ascii to floating point numbers 的縮寫,它會掃描引數str字串,
跳過前面的空白字元(例如空格,tab縮排等,可以通過 isspace() 函式來檢測),
直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字串結束'\0'才結束轉換,
並將結果返回。
引數str 字串可包含正負號、小數點或E(e)來表示指數部分, 如123. 456 或123e-2。
atoi
標頭檔案: #include <stdlib.h>
函式原型:int atoi(const char *nptr);
返回值: 返回整型數。否則,返回零。
說明: 數nptr字串,如果第一個非空格字元存在,是數字或者正負號則開始做型別轉換,
之後檢測到非數字(包括結束符 \0) 字元時停止轉換。
memcpy
標頭檔案: #include <string.h>
函式原型:extern void *memcpy(void *dest, void *src, unsigned int count);
返回值: 函式返回指向dest的指標。
說明: 由src所指記憶體區域複製count個位元組到dest所指記憶體區域,src和dest所指記憶體區域不能重疊。
memset
標頭檔案: #include <string.h>
函式原型:extern void *memset(void *buffer, int c, int count);
返回值: 其返回值為指向buffer的指標。
說明: 把buffer所指記憶體區域的前count個位元組設定成字元c,
它是對較大的結構體或陣列進行清零操作的一種最快方法。
sprintf
標頭檔案:#include <stdio.h>
函式原型:int sprintf(char *buffer, const char *format [, argument] … );
返回值:字串長度 strlen。
說明:把格式化的資料寫入某個字串,注意可變引數的使用。
strchr
標頭檔案: #include <string.h>
函式原型:extern char *strchr(char *str,char character);
返回值: 返回指向第一次出現字元character位置的指標,如果沒找到則返回NULL。
說明: 從字串str中尋找字元character第一次出現的位置,
str為一個字串的指標,character為一個待查詢字元。
scanf
標頭檔案: #include <stdio.h>
函式原型:int scanf(char *format[,argument,...]);
返回值: scanf()函式返回成功賦值的資料項數,出錯時則返回EOF。
說明: scanf()函式是通用終端格式化輸入函式,它從標準輸入裝置(鍵盤) 讀取輸入的資訊。
可以讀入任何固有型別的資料並自動把數值變換成適當的機內格式。
其呼叫格式為: scanf("<格式化字串>",<地址表>);其控制串由三類字元構成:
1。格式化說明符;
2。空白符;
3。非空白符;
(A)格式化說明符
格式字元 說明
%a 讀入一個浮點值(僅C99有效)
%A 同上
%c 讀入一個字元
%d 讀入十進位制整數
%i 讀入十進位制,八進位制,十六進位制整數
%o 讀入八進位制整數
%x 讀入十六進位制整數
%X 同上
%c 讀入一個字元
%s 讀入一個字串
%f 讀入一個浮點數
%F 同上
%e 同上
%E 同上
%g 同上
%G 同上
%p 讀入一個指標
%u 讀入一個無符號十進位制整數
%n 至此已讀入值的等價字元數
%[] 掃描字元集合
%% 讀%符號
附加格式說明字元表修飾符 說明
L/l 長度修飾符 輸入"長"資料
h 長度修飾符 輸入"短"資料
W 整型常數 指定輸入資料所佔寬度
* 星號 空讀一個數據
hh,ll同上h,l但僅對C99有效。
(B)空白字元
空白字元會使scanf()函式在讀操作中略去輸入中的一個或多個空白字元,
空白符可以是space,tab,newline等等,直到第一個非空白符出現為止。
(C)非空白字元一個非空白字元會使scanf()函式在讀入時剔除掉與這個非空白字元相同的字元。
sscanf
標頭檔案: #include <stdio.h>
函式原型:int sscanf(const char *buffer,const char *format,[argument ]...);
返回值: 失敗返回0 ,否則返回格式化的引數個數。
說明: sscanf會從buffer裡讀進資料,依照format的格式將資料寫入到argument裡。
第二個引數可以是一個或多個 {%[*] [width] [{h | I | I64 | L}]type | ' ' | '\t' | '\n' | 非%符號}。
注:
1、 * 亦可用於格式中, (即 %*d 和 %*s) 加了星號 (*) 表示跳過此資料不讀入,
也就是不把此資料讀入引數中。
2、{a|b|c}表示a,b,c中選一,[d],表示可以有d也可以沒有d。3、width表示讀取寬度。
4、{h | l | I64 | L}:引數的size,通常h表示單位元組size,I表示2位元組 size,
L表示4位元組size(double例外),l64表示8位元組size。
5、type :這就很多了,就是%s,%d之類。6、特別的:%*[width] [{h | l | I64 | L}]type 表示滿足該條件的被過濾掉,
不會向目標引數中寫入值。
如:sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s/n", buf);
結果為:123456
isspace
標頭檔案: #include <ctype.h>
函式原型:extern int isspace(int c);
返回值: 當c為空白符時,返回非零值,否則返回零。
空白符指空格、水平製表、垂直製表、換頁、回車和換行符。
說明: 判斷字元c是否為空白符。strcmp
標頭檔案: #include <string.h>
函式原型:int strcmp(const char *s1, const char *s2);
返回值: 若引數s1 和s2 字串相同則返回0。s1 若大於s2 則返回大於0 的值。
s1 若小於s2 則返回小於0 的值。
說明: s1, s2 為需要比較的兩個字串。
字串大小的比較是以ASCII 碼錶上的順序來決定,此順序亦為字元的值。
strcmp()首先將s1 第一個字元值減去s2 第一個字元值,
若差值為0 則再繼續比較下個字元,若差值不為0 則將差值返回。
strcoll
標頭檔案: #include <string.h>
函式原型:int strcoll( const char * str1, const char * str2 );
返回值: 若字串 str1 和 str2 相同則返回0。若 str1 大於 str2 則返回大於 0 的值,否則返回小於 0 的值。
說明: strcoll() 會依環境變數 LC_COLLATE 所指定的文字排列次序來比較 s1 和 s2 字串。
預設情況下,LC_COLLATE 為"POSIX"或"C",strcoll() 和 strcmp() 一樣根據ASCII 比較字串大小。
對於設定了 LC_COLLATE 語言環境的情況下,
則根據 LC_COLLATE 設定的語言排序方式進行比較, 例如,漢字會根據拼音進行比較。