当前位置:网站首页>c语言字符串函数上:strlen、strcpy、strcat
c语言字符串函数上:strlen、strcpy、strcat
2022-07-27 05:03:00 【vpurple__】
本篇博客主要记录c语言中常用的字符串函数strlen、strcpy、strcat、strstr。
剩下的字符串函数如strstr、strcmp、strtok、strerror将在下一篇写出。
由衷的希望自己把这两篇博客写完之后,能把这些字符串函数的用法都分清,不要再搞混了。
目录
1.strlen 求字符串长度函数
//对应的头文件
include<string.h>
size_t strlen ( const char * str );
//返回值:为size_t无符号整型注意事项
1.字符串'\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。
2.参数指向的字符串必须要以 '\0' 结束。
注意:如果strlen测量的字符串没有'\0'作为结尾(如下情况,那么strlen测量的返回值为随机值。
char arr[] = { 'a','b','c' };
3.注意函数的返回值为size_t,是无符号的。
注意:无符号整型加减无符号整型还是无符号整型
#include<stdio.h>
#include<string.h>
int main()
{
if (strlen("abc") - strlen("abcdef") < 0)
{
printf("<\n");
}
else
{
printf(">\n");
}
return 0;
}
//注意此时运行结果为 >
//if (strlen("abc") - strlen("abcdef") < 0)
//因为两个都是无符号整形得到3和6,所以相减为-3
//此时-3会被当做无符号整型处理变成一个非常大的正数>0,要避免这种写法。strlen函数的模拟实现
#include<stdio.h>
size_t my_strlen(char* arr);
int main()
{
char arr[] = { "acdvebv" };
size_t len = my_strlen(arr);
printf("%u\n", len);//size_t类型数据用%u打印
return 0;
}
size_t my_strlen(char* arr)//注意参数
{
int count = 0;
for (count = 0; arr[count] != '\0'; count++)
{
;
}
return count;
}
注意:size_t类型数据要用%u打印。
2.strcpy 字符串拷贝
include<string.h>
char* strcpy(char * destination, const char * source );
strcpy的基础使用
#include<stdio.h>
#include<string.h>
int main()
{
char name[20] = { "aaaaaaaaaa"};
strcpy(name, "zhang\0san");
printf("%s\n", name);
return 0;
}
//name="zhangsan";
//注意不可以直接赋值,name数组名是地址,地址是一个常量值,不能被赋值。
//
//注意只拷贝到\0就停止
//并且把\0也拷贝到name中,所以此时屏幕输出内容为 zhang
注意事项
1.源字符串必须以 '\0' 结束。
注意:当字符串没有以'\0'时,被复制过去最后就是乱码。(如下图所示)。

2.会将源字符串中的 '\0' 拷贝到目标空间。
3.目标空间必须足够大,以确保能存放源字符串。(防止放不下还要放的情况,形成越界访问。
4.目标空间必须可变,不能为不能改的常量字符串。

strcpy的模拟实现
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcpy(char* p, char* p1)
{
assert(p && p1);
int len = strlen(p);
int len1 = strlen(p1);
for (int i = 0; i =< len1; i++)
{
*(p + i) = *(p1 + i);
}
return *p;
}
int main()
{
char arr[20] = { "ancjeioerd" };
char arr1[10] = { "eifjje" };
my_strcpy(arr, arr1);
printf("%s\n", arr);
return 0;
}
3.strcat 字符串追加
include<stdio.h>
char * strcat ( char * destination, const char * source );
注意事项
1.源字符串必须以 '\0' 结束。
2.目标空间必须有足够的大,能容纳下源字符串的内容。
3.目标空间必须可修改。
4.字符串不能自己给自己追加,因为自己的结束标志'\0'会被覆盖,代码会陷入死循环,一直不停自我复制,导致程序崩溃(如下所示。


strcat模拟实现
#include<stdio.h>
#include<string.h>
char* my_strcat(char* p, char* p1)
{
int len = strlen(p);
int len1 = strlen(p1);
for (int i = 0; i =< len1; i++)
{
*(p + i+len) = *(p1 + i);
}
return *p;
}
int main()
{
char arr[20] = { "ancjeioerd" };
char arr1[10] = { "eifjje" };
my_strcat(arr, arr1);
printf("%s\n", arr);
return 0;
}加油!!!明天也要坚持写博客!!!
边栏推荐
猜你喜欢
随机推荐
项目登录注册思路
时间复杂度与空间复杂度
Li Hongyi machine learning team learning punch in activity day01 --- introduction to machine learning
Localdatetime and zoneddatetime
Flask对模型类的操作
笔记系列k8s编排MySQL容器-有状态的容器创建过程
后台频道组管理功能实现
Li Hongyi machine learning team learning punch in activity day06 --- convolutional neural network
后台优惠券管理
md5 密码加密
Flask请求数据获取与响应
C语言初阶——分支语句(if,switch)
C语言字符串介绍以及相关操作函数
How to get started quickly and strengthen learning?
BIO、NIO、AIO区别
Graph cuts learning
Pytorch data type and numpy data are mutually transformed
B1025 reverse linked list*******
Flask对数据库的查询以及关联
conda和pip环境常用命令









