天天看點

C語言常用函數說明

1、原型聲明:char *strcpy(char* dest, const char *src);

頭檔案:#include <string.h> 和 #include <stdio.h>

功能:把從src位址開始且含有null結束符的字元串複制到以dest開始的位址空間

說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字元串。

傳回指向dest的指針。

  char* strcpy(char* des,const char* source)

 {

 char* r=des;

  assert((des != null) && (source != null));

 while((*des++ = *source++)!='\0');

 return r;

 }

 /*while((*des++=*source++));的解釋:指派表達式傳回左操作數,是以在指派null後,循環停止*/

2、函數原型:char*strncpy(char*dest,char*src,size_tn);

功能編輯(c/c++)複制字元串src中的内容(字元,數字、漢字....)到字元串dest中,複制多少由size_tn的值決定。

如果src的前n個位元組不含null字元,則結果不會以null字元結束。如果src的長度小于n個位元組,則以null填充dest直到複制完n個位元組。

src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字元長度+'\0'。

差別:

(1)strcpy隻是複制字元串,但不限制複制的數量,很容易造成緩沖溢出。strncpy要安全一些。

(2)strncpy能夠選擇一段字元輸出,strcpy則不能

3、函數原型:char *strcat(char *dest,char *src);

功能:把src所指字元串添加到dest結尾處(覆寫dest結尾處的'\0')并添加'\0'。

4、函數原型:char *strncat(char *dest,char *src,int n)

參數說明:src為源字元串,dest為目的字元串,n為指定的src中的前n個字元。

所在庫名:#include <string.h>

函數功能:把src所指字元串的前n個字元添加到dest結尾處,覆寫dest結尾處的'/0',實作字元串連接配接。

傳回說明:傳回指針,連接配接後的字元串。

5、函數原型:extern char *strstr(char *str1, const char *str2);

文法:* strstr(str1,str2)

str1: 被查找目标 string expression to search.

str2: 要查找對象 the string expression to find.

傳回值:若str2是str1的子串,則傳回str2在str1的首次出現的位址;如果str2不是str1的子串,則傳回null。

6、函數原型:char *strchr(const char* _str,int _val)

char *strchr(char* _str,int _ch)

頭檔案:#include <string.h>

功能:查找字元串s中首次出現字元c的位置

說明:傳回首次出現c的位置的指針,傳回的位址是被查找字元串指針開始的第一個與val相同字元的指針,如果s中不存在c則傳回null。

傳回值:成功則傳回要查找字元第一次出現的位置,失敗傳回null

7、函數原型:char *strrchr(const char *str, char c);

所屬庫: string.h

函數功能:查找一個字元c在另一個字元串str中末次出現的位置(也就是從str的右側開始查找字元c首次出現的位置),并

傳回這個位置的位址。如果未能找到指定字元,那麼函數将傳回null。

8、函數原型:extern int strcmp(const char *s1,const char *s2);

當s1<s2時,傳回為負數

當s1=s2時,傳回值= 0

當s1>s2時,傳回正數

即:兩個字元串自左向右逐個字元相比(按ascii值大小相比較),直到出現不同的字元或遇'\0'為止。如:

"a"<"b" "a">"a" "computer">"compare"

特别注意:strcmp(const char *s1,const char * s2)這裡面隻能比較字元串,即可用于比較兩個字元串常量,

或比較數組和字元串常量,不能比較數字等其他形式的參數。ansi标準規定,傳回值為正數,負數,0 。

而确切數值是依賴不同的c實作的。

9、函數原型:extern int stricmp(char *s1,char * s2);

功能:比較字元串s1和s2,但不區分字母的大小寫。

說明:strcmpi是到stricmp的宏定義,實際未提供此函數。

當s1<s2時,傳回值<0

當s1=s2時,傳回值=0

當s1>s2時,傳回值>0

在c/c++中,可以用_stricmp等函數處理字元串大小寫不敏感問題。

10、函數原型:int strncmp(const char *, const char *, size_t);

功能:這個函數用來比較s1和s2字元串的前maxlen個字元。如果兩個字元串相等的話,strncmp将傳回0。

如果s1是s2的一個子串的話,s1小于s2。此外還有,函數 int strncmp (const char *s1, const char *s2, size_t size) 此函數與strcmp極為類似。

不同之處是,strncmp函數是指定比較size個字元。也就是說,如果字元串s1與s2的前size個字元相同,函數傳回值為0。

11、函數原型:extern unsigned int strlen(char *s);

功能:計算給定字元串的(unsigned int型)長度,不包括'\0'在内

說明:傳回s的長度,不包括結束符null。

12、函數原型:strtok(char *s, const char *delim);

功能:分解字元串為一組字元串。s為要分解的字元,delim為分隔符字元(如果傳入字元串,則以首字元為分割标準)。

strtok()用來将字元串分割成一個個片段。參數s指向欲分割的字元串,參數delim則為分割字元串中包含的所有字元。

當strtok()在參數s的字元串中發現參數delim中包含的分割字元時,則會将該字元改為\0 字元。

在第一次調用時,strtok()必需給予參數s字元串,往後的調用則将參數s設定成null。每次調用成功則傳回指向被分割出片段的指針。

傳回值:從s開頭開始的一個個被分割的串。當查找不到delim中的字元時,傳回null。

所有delim中包含的字元都會被濾掉,并将被濾掉的地方設為一處分割的節點。

13、函數原型:void *memmove( void* dest, const void* src, size_t count );

頭檔案:<string.h>

功能:由src所指記憶體區域複制count個位元組到dest所指記憶體區域。

14、函數原型:void *memset(void *s, int ch, size_t n);

函數解釋:将s中前n個位元組 (typedef unsigned int size_t )用 ch 替換并傳回 s 。

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

15、函數原型:void *memcpy(void *dest, const void *src, size_t n);

功能:從源src所指的記憶體位址的起始位置開始拷貝n個位元組到目标dest所指的記憶體位址的起始位置中。

傳回值:函數傳回指向dest的指針。

說明:

(1)source和destin所指的記憶體區域可能重疊,但是如果source和destin所指的記憶體區域重疊,那麼這個函數并不能夠確定source所在重疊區域在拷貝之前不被覆寫。

而使用memmove可以用來處理重疊區域。函數傳回指向destin的指針.

(2)如果目标數組destin本身已有資料,執行memcpy()後,将覆寫原有資料(最多覆寫n)。

如果要追加資料,則每次執行memcpy後,要将目标數組位址增加到你要追加資料的位址。

注意:source和destin都不一定是數組,任意的可讀寫的空間均可。

16、函數原型:int memcmp(const void *buf1, const void *buf2, unsigned int count);

功能:比較記憶體區域buf1和buf2的前count個位元組。

當buf1<buf2時,傳回值<0

當buf1==buf2時,傳回值=0

當buf1>buf2時,傳回值>0

說明:該函數是按位元組比較的。

例如:

s1,s2為字元串時候memcmp(s1,s2,1)就是比較s1和s2的第一個位元組的ascii碼值;

memcmp(s1,s2,n)就是比較s1和s2的前n個位元組的ascii碼值;

17、函數原型:int scanf(const char *format,...);

函數 scanf() 是從标準輸入流stdio (标準輸入裝置,一般是鍵盤)中讀内容的通用子程式,可以說明的格式讀入多個字元,并儲存在對應位址的變量中。

其調用形式為: scanf("<格式說明字元串>",<變量位址>);變量位址要求有效,并且與格式說明的次序一緻。

它是格式輸入函數,即按使用者指定的格式從鍵盤上把資料輸入到指定的變量之中。

傳回值:scanf()函數傳回成功指派的資料項數,讀到檔案末尾出錯時則傳回eof。

18、函數原型:extern void printf(const char *format,...);

功能:在c語言中産生格式化輸出的函數(定義在 stdio.h 中),其向終端(顯示器、控制台等)輸出字元。

printf()函數的調用格式為: printf("<格式化字元串>", <參量表>)。

說明:printf()函數是格式化輸出函數, 一般用于向标準輸出裝置按規定格式輸出資訊。

格式輸出,它是c語言中産生格式化輸出的函數(在 stdio.h 中定義)。用于向終端(顯示器、控制台等)輸出字元。格式控制由要輸出的文字和資料格式說明組成。

要輸出的的文字除了可以使用字母、數字、空格和一些數字元号以外,還可以使用一些轉義字元表示特殊的含義。

19、函數原型int snprintf(char *str, size_t size, const char *format, ...);

功能:将可變個參數(...)按照format格式化成字元串,然後将其複制到str中

(1) 如果格式化後的字元串長度 < size,則将此字元串全部複制到str中,并給其後添加一個字元串結束符('\0');

(2) 如果格式化後的字元串長度 >= size,則隻将其中的(size-1)個字元複制到str中,并給其後添加一個字元串結束符('\0'),傳回值為欲寫入的字元串長度。

函數傳回值:若成功則傳回欲寫入的字元串長度,若出錯則傳回負值。

20、函數原型:int sscanf( const char *, const char *, ...);

說明:sscanf與scanf類似,都是用于輸入的,隻是後者以鍵盤(stdin)為輸入源,前者以固定字元串為輸入源。

常見用法:

char buf[512];

sscanf("123456","%s",buf);//此處buf是數組名,它的意思是将123456以%s的形式存入buf中!

printf("%s\n",buf);

結果為:123456

21、函數原型:file * fopen(const char * path,const char * mode);

傳回值:檔案順利打開後,指向該流的檔案指針就會被傳回。如果檔案打開失敗則傳回null,并把錯誤代碼存在errno中。

一般而言,打開檔案後會做一些檔案讀取或寫入的動作,若打開檔案失敗,接下來的讀寫動作也無法順利進行,是以一般在fopen()後作錯誤判斷及處理。

參數說明:

參數path字元串包含欲打開的檔案路徑及檔案名,參數mode字元串則代表着流形态。

mode有下列幾種形态字元串:

r 以隻讀方式打開檔案,該檔案必須存在。

r+ 以可讀寫方式打開檔案,該檔案必須存在。

rb+ 讀寫打開一個二進制檔案,允許讀寫資料,檔案必須存在。

w 打開隻寫檔案,若檔案存在則檔案長度清為0,即該檔案内容會消失。若檔案不存在則建立該檔案。

w+ 打開可讀寫檔案,若檔案存在則檔案長度清為零,即該檔案内容會消失。若檔案不存在則建立該檔案。

a 以附加的方式打開隻寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的内容會被保留。(eof符保留)

a+ 以附加方式打開可讀寫的檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾後,即檔案原先的内容會被保留。 (原來的eof符不保留)

wb 隻寫打開或建立一個二進制檔案;隻允許寫資料。

wb+ 讀寫打開或建立一個二進制檔案,允許讀和寫。

ab+ 讀寫打開一個二進制檔案,允許讀或在檔案末追加資料。

wx 建立文本檔案,隻允許寫入資料.[c11]

wbx 建立一個二進制檔案,隻允許寫入資料.[c11]

w+x 建立一個文本檔案,允許讀寫.[c11]

wb+x 建立一個二進制檔案,允許讀寫.[c11]

w+bx 和"wb+x"相同[c11]

以x結尾的模式為獨占模式,檔案已存在或者無法建立(一般是路徑不正确)都會導緻fopen失敗.檔案以作業系統支援的獨占模式打開.

{file*fp=null;//需要注意

fp=fopen(f_path,"r");

if(null==fp)

    return -1;//要傳回錯誤代碼

fclose(fp);

fp=null;//需要指向空,否則會指向原打開檔案位址}

22、函數原型:char *fgets(char *buf, int bufsize, file *stream);

參數:

*buf: 字元型指針,指向用來存儲所得資料的位址。

bufsize: 整型資料,指明存儲資料的大小。

*stream: 檔案結構體指針,将要讀取的檔案流。

從檔案結構體指針stream中讀取資料,每次讀取一行。讀取的資料儲存在buf指向的字元數組中,每次最多讀取bufsize-1個字元(第bufsize個字元賦'\0'),

如果檔案中的該行,不足bufsize個字元,則讀完該行就結束。如若該行(包括最後一個換行符)的字元數超過bufsize-1,則fgets隻傳回一個不完整的行,

但是,緩沖區總是以null字元結尾,對fgets的下一次調用會繼續讀該行。函數成功将傳回buf,失敗或讀到檔案結尾傳回null。

是以我們不能直接通過fgets的傳回值來判斷函數是否是出錯而終止的,應該借助feof函數或者ferror函數來判斷。

23、函數原型:int fputs(int, file *);

說明:fputs是一種函數,具有的功能是向指定的檔案寫入一個字元串(不自動寫入字元串結束标記符‘\0’)。

成功寫入一個字元串後,檔案的位置指針會自動後移,函數傳回值為非負整數;否則傳回eof(符号常量,其值為-1)。

{charstr[80]="i/osystem.";/*字元串常量存入字元數組*/

file*fp; /*定義檔案指針fp*/

if((fp=fopen("strfile","w"))==null)/*打開檔案寫模式*/

{

printf("cannotopenthefile.\n")/*判斷檔案是否正常打開*/

exit(0);

}

fputs(str,fp);/*将字元串寫入檔案*/

fclose(fp);/*關閉檔案*/}

24、函數格式:int fputc (char c, file *fp)

參數解釋:fp為檔案指針,它的值是執行fopen()打開檔案時獲得的。

n為輸出的字元量。

雖然函數被定義為整形數,但僅用其低八位。

傳回值:在正常調用情況下,函數傳回寫入檔案的字元的ascii碼值,出錯時,傳回eof(-1)。當正确寫入一個字元或一個位元組的資料後,檔案内部寫指針會自動後移一個位元組的位置。

eof是在頭檔案 stdio.h中定義的宏。

{file*f;

char*s="hey,buddy!";

int i;

f=fopen("myfile.txt","w");

for(i=0;i<strlen(s);i++)

fputc(s[i],f);

fclose(f);}

25、函數原型:int fgetc(file *stream);

函數說明:fgetc()從參數stream所指的檔案中讀取一個字元,并把它作為一個字元傳回。若讀到檔案尾或出現錯誤時,它就傳回eof,你必須通過ferror或feof來區分這兩種情況。

傳回值:fgetc()會傳回讀取到的字元,若傳回eof則表示到了檔案尾,或出現了錯誤。

用例:

{ file *fp;

  int c;

  fp=fopen("exist","r");

  while((c=fgetc(fp))!=eof)

     printf("%c",c);

  fclose(fp);}

26、函數原型:int feof(file *stream);

功能:檢測流上的檔案結束符,如果檔案結束,則傳回非0值,否則傳回0,檔案結束符隻能被clearerr()清除。

eof是文本檔案結束的标志。在文本檔案中,資料是以字元的ascⅡ代碼值的形式存放,普通字元的ascⅡ代碼的範圍是32到127(十進制),eof的16進制代碼為0xff(十進制為-1),是以可以用eof作為檔案結束标志。

{if(feof(stream))

    printf("we have reached end of file\n");}

27、函數原型: int ferror(file *stream);

說明:ferror,函數名,在調用各種輸入輸出函數(如 putc.getc.fread.fwrite等)時,如果出現錯誤,除了函數傳回值有所反映外,還可以用ferror函數檢查。 

它的一般調用形式為 ferror(fp);如果ferror傳回值為0(假),表示未出錯。如果傳回一個非零值,表示出錯。應該注意,對同一個檔案 每一次調用輸入輸出函數,

均産生一個新的ferror函 數值,是以,應當在調用一個輸入輸出函數後立即檢 查ferror函數的值,否則資訊會丢失。在執行fopen函數時,ferror函數的初始值自動置為0。

{if(ferror(stream))/*testforanerroronthestream*/

printf("error reading from file\n");}

28、函數原型:int fflush(file *stream);

功 能: 清除讀寫緩沖區,需要立即把輸出緩沖區的資料進行實體寫入時。

傳回值:如果成功重新整理,fflush傳回0。指定的流沒有緩沖區或者隻讀打開時也傳回0值。傳回eof指出一個錯誤。

注意:如果fflush傳回eof,資料可能由于寫錯誤已經丢失。當設定一個重要錯誤處理器時,最安全的是用setvbuf函數關閉緩沖或者使用低級i/0例程,如open、close和write來代替流i/o函數。

{/*flushthestream'sinternalbuffer*/

fflush(stream);}

29、函數原型:int fclose(file *stream);

fclose是一個函數名,功能是關閉一個流。注意:使用fclose()函數就可以把緩沖區内最後剩餘的資料輸出到核心緩沖區,并釋放檔案指針和有關的緩沖區。

傳回值:如果流成功關閉,fclose 傳回 0,否則傳回eof(-1)。(如果流為null,而且程式可以繼續執行,fclose設定error number給einval,并傳回eof。)

30、函數原型:size_t fread ( void *buffer, size_t size, size_t count, file *stream) ;

參 數:

buffer--用于接收資料的記憶體位址

size--要讀的每個資料項的位元組數,機關是位元組

count--要讀count個資料項,每個資料項size個位元組.

stream--輸入流

傳回值:實際讀取的元素個數。如果傳回值與count不相同,則可能檔案結尾或發生錯誤。從ferror和feof擷取錯誤資訊或檢測是否到達檔案結尾。 

{/*readthedataanddisplayit*/

  fread(buf,strlen(msg)+1,1,stream);

  printf("%s\n",buf);}

31、函數原型:int fscanf(file *, const char *, ...);

功 能: 從一個流中執行格式化輸入,fscanf遇到空格和換行時結束,注意空格時也結束。這與fgets有差別,fgets遇到空格不結束。

傳回值:整型,成功傳回讀入的參數的個數,失敗傳回eof(-1)。

常用格式字元說明:

%d:讀入一個十進制整數.

%i :讀入十進制,八進制,十六進制整數,與%d類似,但是在編譯時通過資料前置或後置來區分進制,如加入“0x”則是十六進制,加入“0”則為八進制。例如串“031”使用%d時會被算作31,但是使用%i時會算作25.

%u:讀入一個無符号十進制整數.

%f %f %g %g : 用來輸入實數,可以用小數形式或指數形式輸入.

%x %x: 讀入十六進制整數.

%o': 讀入八進制整數.

%s : 讀入一個字元串,遇空字元‘\0'結束。

%c : 讀入一個字元。無法讀入空值。空格可以被讀入。

繼續閱讀