C 常用函數介紹


 

  

1. strcpy
char *strcpy(char *destin, char *source);
功能:將source指向的字符串拷到destin。

 1 int main()
 2 {
 3 
 4     char dest[5];
 5     char *src="123456";
 6     strcpy(dest, src);
 7     printf("dest= %s, %s, %s", dest, dest+4, dest+5);
 8 
 9     return 0;
10 }

從結果可知確實將src的內容復制過去了,但是全部復制導致dest滿了,使用不當就會出錯!

 

2. strncpy
char *strncpy(char *destin, char *source, int len);
功能:將source指向的len個字符串拷到destin。

 1 int main()
 2 {
 3 
 4     char dest[5];
 5     char *src="123456";
 6     strncpy(dest, src, 3);
 7     dest[3]= '\0';
 8     printf("dest= %s, %s, %s", dest, dest+4, dest+5);
 9 
10     return 0;
11 }

結果可知加上‘\0’結束符后dest內容變的更安全,strcpy和strncpy要額外加字符結束符!

 

3. strcat
char* strcat(char * str1,char * str2);
功能: 把字符串str2接到str1后面,str1最后的'\0'被取消

 1 int main()
 2 {
 3 
 4     char dest[5]="abcd";
 5     char *src="123456";
 6     strcat(dest, src);
 7     printf("dest= %s", dest);
 8 
 9     return 0;
10 }

 

4. strncat
char *strncat(char *dest, const char *src, size_t maxlen)
功能: 將字符串src中前maxlen個字符連接到dest中

 1 int main()
 2 {
 3 
 4     char dest[10]="abcd";
 5     char *src="123456";
 6     strncat(dest, src, 8);
 7     printf("dest= %s", dest);
 8 
 9     return 0;
10 }

與strncpy不同,strncat會自動在末尾加‘\0’,若指定長度超過源字符串長度,則只復制源字符串長度即停止,更安全!

 

 

5. strcmp
int strcmp(char * str1,char * str2);
功能: 比較兩個字符串str1,str2
返回: str1<str2,返回負數;str1=str2,返回 0;str1>str2,返回正數

 1 int main()
 2 {
 3 
 4     char dest[10]="abcd";
 5     char *src="a23456";
 6     char d2[8]="abcd";
 7     int res;
 8     res=strcmp(dest, src);
 9     printf("res= %d \n", res);
10     res=strcmp(dest, d2);
11     printf("res= %d \n", res);
12 
13     return 0;
14 }

結果可知每一位都要比較,且與原字符數組長度無關。

 

6. strncmp
int strncmp(char *str1,char *str2,int count)
功能: 對str1和str2中的前count個字符按字典順序比較
返回: 小於0:str1<str2,等於0:str1=str2,大於0:str1>str2

int main()
{

    char dest[10]="abcd";
    char *src="a23456";
    char d2[8]="abcd";
    int res;
    res=strncmp(dest, src, 1);
    printf("res= %d \n", res);
    res=strncmp(dest, d2, 1);
    printf("res= %d \n", res);

    return 0;
}

 

7. strchr
char* strchr(char* str,char ch);
功能: 找出str指向的字符串中第一次出現字符ch的位置
返回: 返回指向該位置的指針,如找不到,則返回空指針

 1 int main()
 2 {
 3 
 4     char dest[10]="abcd";
 5     char* rp;
 6     char ch= 'c';
 7     rp=strchr(dest, ch);
 8     if(NULL == rp)
 9         printf("no %c exist", ch);
10     else
11         printf("pos of %c is %d", ch, (int)(rp-dest+1));
12 
13     return 0;
14 }

 

8. strrchr
char *strrchr(const char *s, int c)
功能: 得到字符串s中最后一個含有c字符的位置指針
返回: 位置指針

 1 int main()
 2 {
 3 
 4     char dest[10]="abcdabc";
 5     char* rp;
 6     char ch= 'c';
 7     rp=strrchr(dest, ch);
 8     if(NULL == rp)
 9         printf("no %c exist", ch);
10     else
11         printf("pos of %c is %d", ch, (int)(rp-dest+1));
12 
13     return 0;
14 }

strrchr 比strchr多的 r 意指反向尋找,位置都是從1開始計數(非從0開始)

 

9. strstr
char* strstr(char* str1,char* str2);
功能:找出str2字符串在str1字符串中第一次出現的位置(不包括str2的串結束符)
返回: 返回該位置的指針,如找不到,返回空指針

 1 int main()
 2 {
 3 
 4     char dest[10]="abcdabc";
 5     char* rp;
 6     char ch1[]= "c";
 7     char str2[]= "cda";
 8     rp=strstr(dest, ch1);
 9     if(NULL == rp)
10         printf("no %s exist", ch1);
11     else
12         printf("substring is %s \n", rp);
13 
14     rp=strstr(dest, str2);
15     if(NULL == rp)
16         printf("no %s exist", str2);
17     else
18         printf("substring is %s ", rp);
19 
20     return 0;
21 }

可以找單個字符串(字符不符合參數要求)

 

10. strnset
char *strnset(char *s, int ch, size_t n)
功能: 將字符串s中前n個字符設置為ch的值
返回: 指向s的指針

 1 int main()
 2 {
 3 
 4     char dest[10]="abcdabc";
 5     char* rp;
 6     char ch= 'F';
 7     rp=strnset(dest, ch, 4);
 8     printf("after strnset dest is %s \n", rp);
 9 
10     return 0;
11 }

 

11. strset
char *strset(char *s, int ch)
功能: 將字符串s中所有字符設置為ch的值
返回: 指向s的指針

 1 int main()
 2 {
 3 
 4     char dest[10]="abcdabc";
 5     char* rp;
 6     char ch= 'F';
 7     rp=strset(dest, ch);
 8     printf("after strnset dest is %s \n", rp);
 9     printf("after strnset dest is %s \n", dest);
10     return 0;
11 }

結果的 rp和dest 都被修改為同一內容!

 

12. strtok
char *strtok(char *s1, const char *s2)
功能:分解s1字符串,用特定分隔符(s2)分隔成多個字符串
返回: 字符串s1中首次出現s2中的字符前的子字符串指針
strtok()在參數s1的字符串中發現參數s2中包涵的分割字符時,則會將該字符改為\0字符。在第一次調用時,strtok()必需給予參數s1字符串,往后的調用則將參數s1設置成 NULL。每次調用成功則返回指向被分割出片段的指針。

 1 int main()
 2 {
 3 
 4     char dest[]="ab,cd,ef,c";
 5     char* rp;
 6     char ch[]= ",";
 7     rp=strtok(dest, ch);
 8     while(NULL != rp)
 9     {
10         printf("dest: %s ", dest);
11         printf("rp: %s \n", rp);
12         rp=strtok(NULL, ch);
13     }
14 
15     return 0;
16 }

說明:盡量使用可重入版的strtok,Windows平台下為strtok_s,Linux平台下為strtok_r。
牢記strtok函數族的分隔規則:忽略字符串前后的分隔符,連續的分隔符被當做一個處理。
在使用strtok前,請對源字符串進行備份,除非你可以接受字符串被修改這一事實(修改為分隔的第一個字符串)。

 

13. strupr
char *strupr(char *s)
功能: 將字符串s中的字符變為大寫

 1 int main()
 2 {
 3 
 4     char dest[]="ab,cd,EF,c";
 5     char* rp;
 6     rp=strupr(dest);
 7     printf("dest: %s, rp: %s", dest, rp);
 8 
 9     return 0;
10 }

原字符串dest 也被修改!!,對符號和大寫字符無影響。

char *strlwr(char *s)與它相反,將字符串中的字符變為小寫字符

 

 還有一些 memxxx() 函數下次單獨說明,有問題歡迎評論~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM