c語言string.h頭文件中所有函數示例詳解
前言
頭文件<string.h>中有兩大類字符串函數。一類為str開頭的函數,一類men開頭的函數。men開頭的函數,效率會更高一些。
參數中 size_t 是一種無符號整數類型,確保不會出現負數。
一 . str開頭
1. strcpy() 復制
原型:char * strcpy(char *dest, char *src);
功能:src指向的字符 復制到dest中
返回:dest
#include<stdio.h>
#include<string.h>
int main(void)
{
char desn[10];
char* source="hello world!";
strcpy(desn,source);
printf("源字符串 :%s\n",source);
printf("目標字符串:%s\n",desn);
return 0;
}結果:

2. strncpy() 復制
原型:char * strncpy(char *dest, char *src, size_t maxsize)
功能:src指向的字符 復制到dest中,并返回dest,限制最大字符串長度 maxsize。當src中少于maxsize時,使用‘\0’填充。其中size_t是無符號整型,保證maxsize始終為正數。
返回: dest
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * src="hello,world!";
char dest[20];
strncpy(dest, src, 20);
printf("源字符串 :%s\n",src);
printf("目標字符串:%s\n",dest);
system("pause");
return(0);
}運行結果:

3. strcat() 合并
原型:char *strcat(char *dest, const char *src)
功能:將字符串src 連接到dest的尾部。
返回: dest
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * src="world" ;
char dest[50] ="hello,"; /*目標字符串必須聲明足夠的長度,足夠連接src字符串長度*/
strcat(dest, src);
printf("目標字符串:%s\n",dest);
system("pause");
return(0);
}運行:

4. strncat() 合并
原型:char *strcat(char *dest, const char *src,size_t maxsize)
功能:將字符串src 最多前maxsize個字符 連接到dest的尾部。src中必須有字符串結束符'\0'
返回: dest
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * src="world" ;
char dest[50] ="hello,"; /*目標字符串必須聲明足夠的長度,足夠連接src字符串長度*/
strncat(dest, src,3);
printf("目標字符串:%s\n",dest);
system("pause");
return(0);
}運行:

5. strcmp() 比較
原型:int strcmp(const char *str1, const char *str2)
功能:比較字符串str1和str2
返回: 當str1<str2,返回值小于0
當str1=str2,返回值等于0
當str1>str2,返回值大于0
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * str1 ="hello,world!" ;
char * str2 ="hello,human!";
int res= strcmp(str1, str2);
if(res<0)
printf("str1小于str2");
else if(res==0)
printf("str1等于str2");
else
printf("str1大于str2");
printf("\n");
system("pause");
return(0);
}運行結果:

6. strncmp() 比較
原型:int strncmp(const char *str1, const char *str2,size_t maxsize)
功能:字符串str1中至多maxsize個字符與字符串str2比較
返回: 當str1<str2,返回值小于0
當str1=str2,返回值等于0
當str1>str2,返回值大于0
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * str1 ="hello,world!" ;
char * str2 ="hello,human!";
int res= strncmp(str1, str2,5);
if(res<0)
printf("str1小于str2\n");
else if(res==0)
printf("str1等于str2\n");
else
printf("str1大于str2\n");
printf("\n");
system("pause");
return(0);
}運行結果:

發(fā)現和strcmp()中的結果不一樣,是因為strncmp(str1, str2,5)中,只比較了前5個字符。前5個字符都是hello,所以相等。
7. strchr() 查找
原型:char *strchr(const char * src, int c)
功能:查找字符c在src中的第一次出現的位置
返回: 字符c在src中的第一次出現位置的指針
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * str ="hello,world!" ;
char * pos;
pos= strchr(str, 'o');
printf("\n 字符第一次出現的位置為第%d個(從0開始),內存地址為:0x%x\n", pos-str,pos );
system("pause");
return(0);
}運行結果:

8. strrchr() 查找
原型:char * strrchr(const char * src, int c)
功能:查找字符c在src中的最后一次出現的位置
返回: 字符c在src中的最后一次出現位置的指針
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * str ="hello,world!" ;
char * pos;
pos= strrchr(str, 'o');
printf("\n 字符最后一次出現的位置為第%d個(從0開始),內存地址為:0x%x\n", pos-str,pos );
system("pause");
return(0);
}運行結果:

9. strcspn() 查找
原型:size_t strcspn(const char * str1, const char * str2)
功能:返回字符串 str1 中包含str2中字符的前綴的長度。或者可以理解為字符串 str1 中第一個在字符串 str2 中出現的字符下標 。直接看代碼和運行結果,看完就明白了。
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * str1 ="world!" ;
char * str2="jbgar";
int len;
len = strcspn(str1, str2);/*world中r在ar中出現了,它的下標是2*/
printf("\nstr1中找到第一個在str2中出現的字母,它的下標為:%d\n", len);
system("pause");
return(0);
}運行結果:

10. strspn() 查找
原型:size_t strspn(const char * str1, const char * str2)
功能:返回字符串 str1 中不包含str2中字符的前綴的長度?;蛘呖梢岳斫鉃?nbsp;查找字符串 str1 中第一個沒有在字符串 str2 中出現的字符下標 。直接看代碼和運行結果,看完就明白了。這個容易和strcspn()函數搞反,得格外注意。
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * str1 ="world!" ;
char * str2="dewor";
int len;
len = strspn(str1, str2);/*world中l(wèi)在是第一個沒有在dewor中出現,它的下標是3*/
printf("\nstr1中找到第一個沒有在str2中出現的字母,它的下標為:%d\n", len);
system("pause");
return(0);
}運行結果:

11. strpbrk() 查找
原型:char * strpbrk(const char * str1, const char * str2)
功能:查找str2的任意字符在str1中第一次出現的位置,并返回指向這個位置的指針
返回: 字符指針
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * str1 ="world!" ;
char * str2="glar";
char * pos;
pos = strpbrk(str1, str2);/*glar中的r是第一個在world中出現,將返回r的位置,
雖然glar中的l在world中也出現,但是它不是第一個在world中出現的*/
printf("\nstr2的字符在str1中第一個出現的字母是%c,它在str1的下標為%d\n", *pos,pos-str1);
system("pause");
return(0);
}運行結果:

12. strstr() 查找
原型:char * strstr(const char * str1, const char * str2)
功能:查找str2在在str1中第一次出現的位置,并返回指向這個位置的指針
返回: 字符指針
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * str1 ="wohello,world!" ;
char * str2="wor";
char * pos;
pos = strstr(str1, str2);
printf("\n\"wor\"在\"wohello,world\"中第一個出現的位置下標為%d\n", pos-str1);
system("pause");
return(0);
}
運行結果:

13. strlen() 計算長度
原型:size_t strstr(const char * str)
功能:返回str的長度
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * str1 ="hello,world!" ;
int len = strlen(str1);
printf("\n\str1的長度:%d\n", len);
system("pause");
return(0);
}
運行結果:

14. strerror() 錯誤碼
原型:char * strerror(int n)
功能:傳入不同的錯誤碼時 返回對應的錯誤字符串。這個函數很有意思哦。
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
printf("\n \040 0 :%s \n", strerror(0)); /* \040是空格的轉義字符 */
printf("\n \040 1 :%s \n", strerror(1));
printf("\n \040 2 :%s \n", strerror(2));
printf("\n \040 3 :%s \n", strerror(3));
printf("\n \040 4 :%s \n", strerror(4));
printf("\n \040 5 :%s \n", strerror(5));
printf("\n \040 6 :%s \n", strerror(6));
printf("\n \040 -1 :%s \n", strerror(-1));
system("pause");
return(0);
}
運行結果:

15. strtok() 截取
原型:char * strtok(char* str1,const char* str2)
功能:使用str2,對str1字符串進行分隔截取,返回截取的部分字符串
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str [] ="hello@world@coffee@tea!" ;
char * c="@" ;
printf("\n第一個:%s\n", strtok(str,c));
printf("\n第二個:%s\n", strtok(NULL,c));
printf("\n第三個:%s\n", strtok(NULL,c));
printf("\n第四個:%s\n", strtok(NULL,c));
printf("\n再重新開始:%s\n", strtok(str,c));
system("pause");
return(0);
}運行結果:

二. mem開頭
men開頭的函數,主要目的是提供一個高效的函數接口。
1. memcpy() 復制
原型:void * memcpy( char * str1, const char * str2 ,int n)
功能:將字符串str2中的n個字符拷貝到str1中;
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str1[13] ;
char * str2="hello,world!" ;
memcpy(str1,str2,13);
printf("\n\str1中字符為:%s\n", str1);
system("pause");
return(0);
}
運行結果:

2. memcmp() 比較
原型:int memcmp(const char * str1, const char * str2 ,int n)
功能:str1中的前n個字符和str2中的值進行比較。
返回:
當str1<str2時,返回值<0
當str1=bstr2時,返回值=0
當str1>str2時,返回值>0
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * str1="hello,world!" ;
char * str2="helle" ;
char * resstr;
int res=memcmp(str1,str2,5);
if(res<0)
resstr="小于";
else if(res=0)
resstr="等于";
else
resstr="大于";
printf("\n\str1的前5個字符%sstr2的字符\n", resstr);
system("pause");
return(0);
}
運行結果:

3. memchr() 查找
原型:char * memchr(const char * str, char c ,int n)
功能:在str中前n個字符中查找 c的位置,返回找到的位置的指針,如果找不到返回NULL
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * str="hello,world!" ;
char c=',' ;
char * pos;
pos=(char*) memchr(str,c,10);
printf("\n\",\"在\"hello,world\"的下標位置為:%d\n", pos-str);
system("pause");
return(0);
}運行結果:

4. memset() 替換
原型:void * memset( void * ptr, int value ,size_t n)
功能:此函數初始化函數,將某一塊內存(參數ptr)中的內容全部設置為指定的值 value
將ptr中的前n個數據替換為value,并返回ptr,
示例1:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str []="hello,world!" ;
char c='w' ;
memset(str,c,5);
printf("\n\str中字符串:%s\n", str);
system("pause");
return(0);
}運行結果:

示例2:
結構變量初始化,將結構中的變量用value初始化。
#include <stdio.h>
#include <stdlib.h>
typedef struct manager {
int iArr [12];
float fArr [5];
char ch; //整型int賦值給char,只要數組在-128到127之間就沒問題
} Manager;
//打印manager中的值
void printManager(Manager manager)
{
int i=0;
puts("iArr值:");
for(; i<12; i++) //打印數組iArr的所有元素
printf("第%d個: %d\n",i+1, manager.iArr[i]);
puts("\nmanager->fArr值:");
for(i=0; i<5; i++) //打印數組fArr的所有元素
printf("第%d個: %f\n",i+1, manager.fArr[i]);
puts("\nmanager->ch值:");
printf("%c\n", manager.ch);
}
void memsetTest()
{
Manager manager ;
printf("使用65初始化\n");
memset(&manager,65,sizeof(manager));
printManager(manager);
printf("\n使用0初始化\n");
memset(&manager,0,sizeof(manager));
printManager(manager);
}
int main()
{
memsetTest();
getchar();
return 0;
}
返回結果:

5. memmove() 替換
原型:void * memmove( char * str1, const char * str2 ,int n)
功能:將s中的前n個字符替換為c,并返回s,功能和memcpy一樣,但是可以解決linux下memcpy因為地址重疊而造成替換失敗的問題。算是對memcpy的一個升級。在windows系統中沒有這個問題。
示例:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char * src="hello,world!";
char dest[20];
memmove(dest, src, 20);
printf("源字符串 :%s\n",src);
printf("目標字符串:%s\n",dest);
system("pause");
return(0);
}運行結果:

總結
到此這篇關于c語言string.h頭文件中所有函數示例詳解的文章就介紹到這了,更多相關c語言string.h頭文件函數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++利用 _findfirst與_findnext查找文件的方法
這篇文章主要給大家介紹了關于C++利用 _findfirst與_findnext查找文件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-06-06

