C语言:字符串操作函数与字符操作函数

字符串的多种形式

1.字符数组形式(不写元素个数)

	char str1[] = {
    'a','b','c' };
	char str2[] = {
    "abc" };
	char str3[] = "abc";

在这里插入图片描述

可见在不写数组元素个数,只写[ ]时,str1不会在后面自动补充\0
在写成字符串时可自动补\0


2.字符数组形式(写元素个数)

	char str1[3] = {
    'a','b','c' };
	char str2[4] = {
    'a','b','c' };

	char str3[3] = {
    "abc" };
	char str4[4] = {
    "abc" };

	char str5[3] = "abc";
	char str6[4] = "abc";

在这里插入图片描述

可见在输入元素后大家表现的都非常一致,当元素仅仅够字符不够加上\0时都不会主动加\0,当有元素多出时会在字符串后面出现\0
但要注意,str2这种情况有\0是因为多出的元素默认为\0
str4和str6这种情况有\0是因为字符串末尾会自己追加\0
str3和str5之所以没有追加上\0是因为元素不足


3.字符指针(常量字符串)

	char* str1 = "abc";
	char* str2 = {
    "abc" };
	printf("%s\n", str1);
	printf("%s\n", str2);

在这里插入图片描述

这个里用字符指针接收的都是常量字符串,在内存中你看不到到底后面是否有\0
所以利用%s遇到\0停止打印这一特性,会发现str1和str2都可以正常打印创建的常量字符串,所以常量字符串后面会自动追加\0

总结

输入“abc”这种字符串时,只要开辟的空间够多就可以自动追加\0,如果不够也就是少了\0的空间,那就无法追加\0
“abc”和{“abc”}的情况相同
{ ‘a’,‘b’,‘c’ }这种情况不论什么时候都不会自动追加\0

在开辟字符串时多出的内存会默认变为\0






1.求字符串长度函数strlen( )

size_t strlen ( const char * str );


功能:记录字符串\0前有多少个字符


1.字符串已经 '\0’作为结束标志,strlen函数返回的是在字符串中 '\0’前面出现的字符个数(不包含 ‘\0’)




2.参数指向的字符串必须要以 '\0’结束
在这里插入图片描述
只所以len1是15是因为str1中没有\0,strlen在str1中一直没找到\0,终于在第15个字符后找到了,所以记录15,实则是随机值,而str2中有\0,所以返回3也就是记录了3个字符




3.注意函数的返回值为size_t是无符号的
在这里插入图片描述
strlen(“abc”)应该是3而strlen(“qwerty”)应该是6,结果输出的是>,这时为什么呢,是因为strlen返回的是一个size_t的无符号整形,3-7虽然是-4但是size_t会认为它是一个很大的正数,所以输出的>而不是<=
修改:在这里插入图片描述



strlen函数的模拟实现
计数器方法

size_t my_strlen(const char* str)
{
   
	assert(str);
	int count = 0;
	while (*str++ != '\0')
	{
   
		count++;
	}
	return count;
}

递归方法

size_t my_strlen(const char* str)
{
   
	if (*str == '\0')
	{
   
		return 0;
	}
	else
	{
   
		return my_strlen(str+1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值