1.strcpy函数
原型:strcpy(str1,str2);
功能:将字符串str2复制到字符串str1中,并覆盖str1原始字符串,可以用来为字符串变量赋值
返回:str1
说 明: 如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况,在编写程序时需特别留意,或者用strncpy()来取代;
注意:
1)字符串str2会覆盖str1中的全部字符,
2)字符串str2的长度不能超过str1,
3) 拷贝原理:从首元素开始,遇到\0结束
例如:
#include <string.h>
{
char string[10];
char *str1 = "abcdefghi";
printf("%s\n", string); // 输出:abcdefghi
return 0;
}
2.strncpy函数
原型:strncpy(str1,str2,n);
功能:将字符串str2中的前n个字符复制到字符串str1的前n个字符中
返回:str1
说 明: 不像strcpy(),strncpy()不会向dest追加结束标记'\0';
src和dest所指的内存区域不能重叠,且dest必须有足够的空间放置n个字符;
注意:
1)不会清除str1中全部字符串,只会改变前n个字符串,
2)n不能大于字符串str1、str2的长度
3)但是如果使用strncpy_s便会清除str1中的全部字符串
例如:
#include <string.h>
{
char string[10];
char *str1 = "abcdefghi";
string[3] = '\0';
printf("%s\n", string); // 输出:abc
return 0;
}
3.strcat函数
原型:strcat(str1,str2);
功能:将字符串str2添加到字符串str1的尾部,也就是拼接两个字符串
返回:str1
说 明: strcat() 会将参数src字符串复制到参数dest所指的字符串尾部;
dest最后的结束字符'\0'会被覆盖掉,并在连接后的字符串的尾部再增加一个'\0';
dest与src所指的内存空间不能重叠,且dest要有足够的空间来容纳要复制的字符串;
例如:
#include <stdio.h>
{
char destination[25];
char *blank = " ", *c = "C++", *Borland = "Borland";
strcat(destination, blank);
strcat(destination, c);
return 0;
}
4.strncat函数
原型:strncat(str1,str2,n);
功能:将字符串str2的前n个字符添加到字符串str1的尾部
返回:str1
注意:拼接之后的长度不能超过字符串数组str1的长度
说 明: strncat()将会从字符串src的开头拷贝n个字符到dest字符串尾部,dest要有足够的空间来容纳要拷贝的字符串;
如果n大于字符串src的长度,那么仅将src全部追加到dest的尾部;
strncat()会将dest字符串最后的'\0'覆盖掉,字符追加完成后,再追加'\0';
例如:
#include<string.h>
{
char url[100] = "http://blog.csdn.net";
char path[30] = "/cpp/u/string/";
strncat(url, path, 1000); // 1000远远超过path的长度
printf("%s\n", url); // 输出;http://blog.csdn.net/cpp/u/string/
return 0;
}
5.strlen函数
原型:strlen(str1);
功能:计算字符串str1的长度
返回:一个int值
说 明: strlen() 函数计算的是字符串的实际长度,遇到第一个'\0'结束;
如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止;
sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数;
例如:
#include<string.h>
{
char str[5] = "abcd";
printf("strlen(str)=%d, sizeof(str)=%d\n", strlen(str), sizeof(str)); // 输出:strlen(str)=4, sizeof(str)=5
return 0;
}
6.strcmp函数
原型:strcmp(str1,str2);
功能:比较两个字符串,如果两个字符串相等,则返回0;若str1大于str2(对于大于的理解,是指从两个字符串的第一个字符开始比较,若两个字符相同,则继续比较,若发现两个字符不相等,且str1中该字符的ASCII码大于str2中的,则表示str1大于str2),返回一个正数(这个正数不一定是1);若str1小于str2,返回一个负数(不一定是-1);若字符串str1的长度大于str2,且str2的字符与str1前面的字符相同,则也相对于str1大于str2处理
原型2:strncmp(str1,str2,n);
功能2:比较两个字符串的前n个字符
原型3:stricmp(str1,str2); (在Windows中使用stricmp,在Linux中使用strcasecmp)
功能3:忽略两个字符串中的大小写比较字符串,也就是对大小写不敏感。
程序例:
#include <stdio.h>
{
char *a = "aBcDeF";
char *b = "AbCdEf";
char *c = "aacdef";
char *d = "aBcDeF";
printf("strcmp(a, b) : %d\n", strcmp(a, b)); // 输出:1
printf("strcmp(a, c) : %d\n", strcmp(a, c)); // 输出:-1
printf("strcmp(a, d) : %d\n", strcmp(a, d)); // 输出:0
return 0;
}
7.strchr函数
原型:strchr(str,c);
功能:在str字符串中查找首次出现字符c的位置(从字符串的首地址开始查找)
原型2:strrchr(str,c);
功能2:在字符串str中从后向前开始查找字符c首次出现的位置
原型3:strstr(str1,str2);
功能3:在字符串str1中查找字符串str2的位置,若找到,则返回str2第一个字符在str1中的位置的指针,若没找到,返回NULL
返回:字符c的位置的指针,若没有查找到字符c,则返回空指针NULL
字符串str的结束标志‘\0’也会被纳入检索范围,所以str的最后一个字符也可以被定位;
如果希望查找某字符在字符串中最后一次出现的位置,可以使用 strrchr() 函数;
程序例:
#include <string.h>
{
char *s = "0123456789012345678901234567890";
char *p;
p = strchr(s, '5');
printf("%ld\n", s); // 输出:134513940
printf("%ld\n", p); // 输出:134513945
p = strrchr(s, '5');
printf("%ld\n", p); // 输出:134513965
return 0;
}
8.strpbrk函数
原型:strpbrk(str1,str2);
功能:依次检验字符串 str1 中的字符,当被检验字符在字符串 str2 中也包含时,则停止检验,并返回该字符位置
返回:第一个两个字符串中都包含的字符在str1中的位置的指针
程序例:
#include<string.h>
char* s1 = "see you again";
char* s2 = "you";
char* p = strpbrk(s1,s2);
if(p){
printf("The result is: %s\n",p); // 输出:The result is: you again
}else{
printf("Sorry!\n");
}
return 0;
}
9.字符串转数字atoi、atof、atol函数
atoi(str); //字符串转换到int整型
atof(str); //字符串转换到double浮点数
atol(str); //字符串转换到long整形
{
// 函数1,字符串转整型,atoi()
// 说明:扫描字符串,跳过前面的空格,直到遇到数字或正负号则开始转换,遇到非数字或 \0 结束转换,返回转换的值
// 来源:stdlib.h头文件
// 扩展:相似的有 atof, atol 顾名思义,就是转float, long
// 注意:必须本身就是数字的字符串才能被正确转换
// 举例:
char *str = "125";
int i = atoi(str);
printf("i = %d\n", i);
// 数字转字符串
int j = 10005;
char arr[20];
sprintf(arr, "%d", j); //c语言里面不能直接 + 连接,需要这么格式化
printf("arr = %s\n", arr);
return 0;
}
10.函数名: strstr
用 法: char *strstr( char *str, char * substr );
返回值: 返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL
程序例:
#include<string.h>
int main(){
char *str = "HelloWorldHelloWorld";
char *substr = "World";
char *s = strstr(str, substr);
printf("%s\n", s); // 输出:WorldHelloWorld
return 0;
}
功 能: 根据分界符将字符串分割成一个个片段
用 法: char *strtok(char *s, const char *delim);
返回值: 返回下一个分割后的字符串指针,如果已无从分割则返回NULL
说 明: 当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为'\0'字符;
在第一次调用时,strtok()必须赋予参数s字符串,往后的调用则将参数s设置成NULL;
程序例:
#include <string.h>
{
char s[] = "ab-cd : ef";
char *delim = "-: ";
char *p;
printf("%s \n", strtok(s, delim));
// 输出:ab
// cd
// ef
while((p = strtok(NULL, delim)))
printf("%s ", p);
printf("\n");
}
用 法: char *strerror(int errnum);
程序例:
#include <errno.h>
{
char *buffer;
buffer = strerror(errno);
printf("Error: %s\n", buffer); // 输出:Error: Success
return 0;
}