一,获取字符串长度:strlen()
#include<stdio.h>
#include<string.h>
int main()
{
char str[]="I love FishC.com";
printf("sizeof str = %d\n",sizeof(str));//获取字符类型的字符串所占空间长度
printf("sizeof str = %d\n",strlen(str));//获取字符串长度
return 0;
}`
二,拷贝字符串:strcpy() 和 strncpy()
1,strcpy()演示:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "Original String";
char str2[] = "New String";
char str3[100];
strcpy(str1,str2);//把str2 → str1
//注意str1字符串的长度要大于str2
strcpy(str3,"Copy Successful");
printf("str1: %s\n",str1);
printf("str2: %s\n",str2);
printf("str3: %s\n",str3);
return 0;
}
运行结果:
str1: New String
str2: New String
str3: Copy Successful
[注意]:
在某些编译环境下(linux中的vi编译环境),如果strcpy(str1,str2)中
str2字符串长度大于str1会出现字符串的丢失,如:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "Original String";
char str2[] = "New String";
char str3[100];
strcpy(str2,str1);//把str1 → str2
//注意str1字符串的长度大于str2
strcpy(str3,"Copy Successful");
printf("str1: %s\n",str1);
printf("str2: %s\n",str2);
printf("str3: %s\n",str3);
return 0;
}
运行结果:
str1: tring
str2: Original String
str3: Copy Successful
2,考虑到这个,在拷贝字符串时可能会限制字符串的长度,就有了如下的函数:
strncpy(str1,str2,n)
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "to be or not to be";
char str2[40];
strncpy(str2,str1,5);
str2[5] = '\0';
printf("str2 = %s\n",str2);
return 0;
}
在Dev-C++中如果没有str2[5] = '\0';
是不会有影响的,但在某些编译环境下,strncpy(str1,str2,n)函数只是把字符串复制了过来,并没有把字符串最后的'\0'
复制过来,此时就需要我们手动加一个终止字符(即语句:str2[5] = '\0';
)
三,连接字符串:strcat()和strncat()
1,strcat(str1,str2)
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "to be or not to be";
char str2[] = "That is a question";
strcat(str1," ");
strcat(str1,str2);//可以试试把str1和str2互换一下
printf("str1 = %s\n",str1);
return 0;
}
运行结果:
str1 = to be or not to be That is a question
这里 有意思的是把strcat(str1,str2);
str1和str2互换一下
运行结果:
str1 = o be
具体原因是什么,我也不清楚
2,strncat(str1,str2,n)
strncat(str1,str2,n)函数与strncpy(str1,str2,n)函数类似,只有一点不相同,就是strncat(str1,str2,n)函数会自动地在后边添加一个'\0'
不像strncpy(str1,str2,n)函数在某些编译器下需要手动添加
四,比较字符串函数strcmp()和strncmp()
1,strcmp(str1,str2)
strcmp(str1,str2)函数会比较str1和str2两个字符串,
如果两个字符串相同,返回0;
如果不相同,返回一个非0的整数(两个字符串ASCLL码差值)
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "to be or not to be";
char str2[] = "to be or not to be";
if(!strcmp(str1,str2))
{
printf("两个字符串完全一致");
}
else
{
printf("两个字符串不一致");
}
return 0;
}
输出结果
两个字符串完全一致
2,strncmp()
类似的strncmp(str1,str2,n)函数是比较两个字符串前n个字符是某相同,相同返回0
不同返回一个非0的数