「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」。
函数介绍
求字符串长度:
strlen
长度不受限制的字符串函数:
strcpy
strcat
strcmp
长度受限制的字符串函数介绍:
strncpy
strncat
strncmp
字符串查找:
strstr
strtok
错误信息报告:
strerror
正文开始~
1.strlen
size_t strlen(const char* str);
1.字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0'前面出现的字符个数(不包含'\0')
2.参数指向的字符串必须要以'\0'结束
3.函数的返回值为size_t,是无符号的
例:
int main()
{
int len = strlen("abcdef");
printf("%d\n", len);
return 0;
}
输出值为:6
int main()
{
char arr[] = { 'a','b','c','d','e','f' };
int len = strlen(arr);
printf("%d\n", len);
return 0;
}
输出值为;随机值
实现strlen函数的方法:
//1.计数器的方法 如下
//2.递归(不创建临时变量求字符串长度)
//3.指针减指针
模拟实现:
#include<assert.h>
int my_strlen(const char* str)
{
int count = 0;
assert(str != NULL);
while (*str != '\0')//while(*str)
{
count++;
str++;
}
return count;
}
int main()
{
int len = my_strlen("abcdef");
printf("%d\n", len);
return 0;
}
2.1 strcpy
char* strcpy(char* destination, const char* source);
1.源字符串必须以 '\0'结束
//错误的示范
char arr2[] = {'a','b','c'};
2.会将源字符串中的'\0'拷贝到目标空间
3.目标空间必须足够大,以确保可以存放源字符串
模拟实现:
char* my_strcpy(char* dest, const char* src)
{
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
//拷贝src指向的字符串到dest指向的空间,包含'\0'
while (*dest++ = *src++)
{
;
}
//返回目的空间的起始地址
return ret;
}
int main()
{
char arr1[] = "abcdefghi";
char arr2[] = "bit";
my_strcpy(arr1, arr2);//
printf("%s\n", arr1);
return 0;
}
2.2 strcat
char* strcat(char* destination, const char* source);
1.源字符串必须以 '\0'结束
2.目标空间必须足够大,以确保可以容纳下源字符串的内容
3.目标空间必须可修改
int main()
{
char arr1[] = "hello";
char arr2[] = "world";
strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
函数介绍
求字符串长度:
strlen
长度不受限制的字符串函数:
strcpy
strcat
strcmp
长度受限制的字符串函数介绍:
strncpy
strncat
strncmp
字符串查找:
strstr
strtok
错误信息报告:
strerror
正文开始~
1.strlen
size_t strlen(const char* str);
1.字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0'前面出现的字符个数(不包含'\0')
2.参数指向的字符串必须要以'\0'结束
3.函数的返回值为size_t,是无符号的
例:
int main()
{
int len = strlen("abcdef");
printf("%d\n", len);
return 0;
}
输出值为:6
int main()
{
char arr[] = { 'a','b','c','d','e','f' };
int len = strlen(arr);
printf("%d\n", len);
return 0;
}
输出值为;随机值
实现strlen函数的方法:
//1.计数器的方法 如下
//2.递归(不创建临时变量求字符串长度)
//3.指针减指针
模拟实现:
#include<assert.h>
int my_strlen(const char* str)
{
int count = 0;
assert(str != NULL);
while (*str != '\0')//while(*str)
{
count++;
str++;
}
return count;
}
int main()
{
int len = my_strlen("abcdef");
printf("%d\n", len);
return 0;
}
2.1 strcpy
char* strcpy(char* destination, const char* source);
1.源字符串必须以 '\0'结束
//错误的示范
char arr2[] = {'a','b','c'};
2.会将源字符串中的'\0'拷贝到目标空间
3.目标空间必须足够大,以确保可以存放源字符串
模拟实现:
char* my_strcpy(char* dest, const char* src)
{
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
//拷贝src指向的字符串到dest指向的空间,包含'\0'
while (*dest++ = *src++)
{
;
}
//返回目的空间的起始地址
return ret;
}
int main()
{
char arr1[] = "abcdefghi";
char arr2[] = "bit";
my_strcpy(arr1, arr2);//
printf("%s\n", arr1);
return 0;
}
2.2 strcat
char* strcat(char* destination, const char* source);
1.源字符串必须以 '\0'结束
2.目标空间必须足够大,以确保可以容纳下源字符串的内容
3.目标空间必须可修改
int main()
{
char arr1[] = "hello";
char arr2[] = "world";
strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
\
函数介绍
求字符串长度:
strlen
长度不受限制的字符串函数:
strcpy
strcat
strcmp
长度受限制的字符串函数介绍:
strncpy
strncat
strncmp
字符串查找:
strstr
strtok
错误信息报告:
strerror
正文开始~
1.strlen
size_t strlen(const char* str);
1.字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0'前面出现的字符个数(不包含'\0')
2.参数指向的字符串必须要以'\0'结束
3.函数的返回值为size_t,是无符号的
例:
int main()
{
int len = strlen("abcdef");
printf("%d\n", len);
return 0;
}
输出值为:6
int main()
{
char arr[] = { 'a','b','c','d','e','f' };
int len = strlen(arr);
printf("%d\n", len);
return 0;
}
输出值为;随机值
实现strlen函数的方法:
//1.计数器的方法 如下
//2.递归(不创建临时变量求字符串长度)
//3.指针减指针
模拟实现:
#include<assert.h>
int my_strlen(const char* str)
{
int count = 0;
assert(str != NULL);
while (*str != '\0')//while(*str)
{
count++;
str++;
}
return count;
}
int main()
{
int len = my_strlen("abcdef");
printf("%d\n", len);
return 0;
}
2.1 strcpy
char* strcpy(char* destination, const char* source);
1.源字符串必须以 '\0'结束
//错误的示范
char arr2[] = {'a','b','c'};
2.会将源字符串中的'\0'拷贝到目标空间
3.目标空间必须足够大,以确保可以存放源字符串
模拟实现:
char* my_strcpy(char* dest, const char* src)
{
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
//拷贝src指向的字符串到dest指向的空间,包含'\0'
while (*dest++ = *src++)
{
;
}
//返回目的空间的起始地址
return ret;
}
int main()
{
char arr1[] = "abcdefghi";
char arr2[] = "bit";
my_strcpy(arr1, arr2);//
printf("%s\n", arr1);
return 0;
}
2.2 strcat
char* strcat(char* destination, const char* source);
1.源字符串必须以 '\0'结束
2.目标空间必须足够大,以确保可以容纳下源字符串的内容
3.目标空间必须可修改
int main()
{
char arr1[] = "hello";
char arr2[] = "world";
strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
虽然可以将world加到hello的后面,但是却报错了这是为什么呢?
这是因为arr1周围栈区损坏,arr1中的位置不够