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 : 讀入一個字元。無法讀入空值。空格可以被讀入。