本章列举一些常用的字符串函数以及它的详细作用,和注意事项,希望对您有所帮助!
文章目录
一、函数介绍:
1、strlen
这一函数不做多说,它唯一的作用就是是用来求字符串长度的。
注意事项
1、这里是字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包
含 ‘\0’ )。
2、参数指向的字符串必须要以 ‘\0’ 结束。
3、注意函数的返回值为size_t,是无符号的
如下图函数前面的返回值为size_t是无符号类型
代码实现:
int main()
{
char ch [] = "absd";
printf("%zd", strlen(ch));
return 0;
}
2、strcpy
函数参数与调用参数介绍如下图:
作用:这个函数是将源指向的 C 字符串复制到目标指向的数组中,包括结束字符(并在此处停止)。
简单来讲就是复制字符串;
注意事项:
1、Copies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point).
2、源字符串必须以 ‘\0’ 结束
3、会将源字符串中的 ‘\0’ 拷贝到目标空间
4、目标空间必须足够大,以确保能存放源字符串
5、目标空间必须可变
代码实现:
int main()
{
char arr1[10] = "";
char arr2[] = "hello word";
strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
3、strcat
函数参数与调用参数介绍如下图:
作用:将源字符串的副本追加到目标字符串。目标中的结束空字符被源的第一个字符覆盖,并且在由目标中的两个字符串串联形成的新字符串的末尾包含一个空字符。
注意事项:
1、源字符串必须以 ‘\0’ 结束。
2、目标空间必须有足够的大,能容纳下源字符串的内容。
3、目标空间必须可修改。
代码实现:
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
4、strcmp
函数返回参数与调用参数介绍如下图:
作用:这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续使用以下对,直到字符不同或到达终止的空字符为止。
规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
代码实现:
nt main()
{
int ret = strcmp("bbq", "bcq");
if (ret > 0)
printf(">\n");
else if (ret < 0)
printf("<\n");
else
printf("=\n");
printf("ret:%d\n", ret);
return 0;
}
5、strncpy
函数返回参数与调用参数介绍如下图:
作用:将源的第一个 num 字符复制到目标。如果在复制 num 字符之前找到了源 C 字符串的结尾(由 null 字符表示) ,则用零填充目标字符,直到向其写入了总的 num 字符
&emsp;注意事项:
1、如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
代码实现:
int main()
{
char arr1[20] = "abcdef";
char arr2[] = "xxx";
strncpy(arr1, arr2, 5);
printf("%s", arr1);
return 0;
}
6、strncat
函数返回参数与调用参数介绍如下图:
作用:将源的第一个 num 字符追加到目标,再加上一个终止的 null 字符。
注意事项:
1、 如果源中的 C 字符串的长度小于 num,则只复制到终止 null 字符为止的内容。
代码实现:
int main()
{
char arr1[20] = "abcdef\0yyyyyyyy";
char arr2[] = "xxxxxxxxx";
strncat(arr1, arr2, 3);
printf("%s", arr1);
return 0;
}
7、strncmp
函数返回参数与调用参数介绍如下图:
作用:比较 C 字符串 str1和 C 字符串 str2的 num 字符。这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续执行以下对,直到字符不同,直到达到终止的 null 字符,或者直到两个字符串中的 num 字符匹配,以先发生者为准。
返回规则:
代码实现:
int main()
{
char arr1[] = "abcqwersd";
char arr2[] = "abcdef";
printf("%d\n", strncmp(arr1, arr2, 5));
return 0;
}
8、strstr
函数返回参数与调用参数介绍如下图:
作用:返回一个指向 str1中第一个出现的 str2的指针,或者如果 str2不是 str1的一部分,返回一个 null 指针。匹配过程不包括终止的 null 字符,但在那里停止。
代码实现:
int main()
{
char arr1[] = "abbbfks";
char arr2[] = "abb";
char* ret = strstr(arr1, arr2);
if (ret != NULL)
printf("%s\n", ret);
else
printf("找不到\n");
return 0;
}
9、strtok
函数返回参数与调用参数介绍如下图:
1、sep参数是个字符串,定义了用作分隔符的字符集合
2、第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标
记。
3、strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:
strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容
并且可修改。)
4、strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串
中的位置。
5、strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标
记。
6、如果字符串中不存在更多的标记,则返回 NULL 指针。
代码实现:
int main()
{
char arr[] = "zyfboke@qq.com";
char copy[30];
strcpy(copy, arr);
char sep[] = "@.#";
char* ret = NULL;
for (ret = strtok(copy, sep); ret != NULL; ret=strtok(NULL, sep))
{
printf("%s\n", ret);
}
return 0;
}
10、memcpy
函数返回参数与调用参数介绍如下图:
作用:
将数字字节的值从源指向的位置直接复制到目标指向的内存块
注意事项;
1、函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。
2、这个函数在遇到 ‘\0’ 的时候并不会停下来
3、如果source和destination有任何的重叠,复制的结果都是未定义的。
代码实现:
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[20] = { 0 };
//将arr1中的内容,拷贝到arr2中
memcpy(arr2, arr1, 40);
int i = 0;
for (i = 0; i < 20; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
11、memmove
函数返回参数与调用参数介绍如下图:
作用:将数字字节的值从源指定的位置复制到目标指定的内存块。复制就像使用中间缓冲区一样,允许目标和源重叠。
注意事项:
1、和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
2、如果源空间和目标空间出现重叠,就得使用memmove函数处理。
代码实现:
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
memmove(arr1, arr1+3, 20);
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
12、memcmp
函数返回参数与调用参数介绍如下图::
作用:将 ptr1指向的内存块的第一个 num 字节与 ptr2指向的第一个 num 字节进行比较,如果它们都匹配,则返回零,或者返回一个与零不同的值,如果不匹配,则表示该值更大
注意事项:
1、注意,与 strcmp 不同,函数在找到空字符后不会停止比较
返回规定值:
代码实现:
int main()
{
int arr1[] = { 1,2,1,4,5,6 };
int arr2[] = { 1,2,257 };
int ret = memcmp(arr1, arr2, 10);
printf("%d\n", ret);
return 0;
}
萌新请多多包涵,有什么不足,多谢告知!!