C详细的字符串函数

这篇具有很好参考价值的文章主要介绍了C详细的字符串函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

但行前路,莫问归期

C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记

要注意的是,要使用下边所讲的函数要包含头文件<string.h>

strlen

求字符串的长度
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记

  • 函数参数:字符串指针
  • 函数功能:传入字符串指针,字符串是以\0为结束标志,返回的类型size_t其实就是unsigned int,函数返回的是字符串中**‘\0’前边字符的个数**,传入字符串指针用const修饰*str,防止函数意外修改传入的字符串。
  • 返回值类型:无符号整形,即结束标志前字符数量

函数功能演示
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
查找到’\0’就结束演示
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
模拟实现
根据函数的功能,返回值来编写
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记

unsigned int _strlen(const char *arr)
{
	int count = 0;//计数
	while (*arr)
	{
		count++;
		arr++;//字符指针向后走
	}
}

strcpy

C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记

  • 函数参数:一个是目的地,另一个是源头。
  • 函数功能:将源头字符串拷贝到目标空间。
  • 返回值:返回拷贝完成后第一个字符串的地址。

注意:
1,源字符串必须以’\0’结尾。不能这样搞

char arr[4]={'a','b','c','d'}

 如果第二个参数是这样一个没有结束标志’\0’的字符串,那么函数在实现时就会一直往后找,就会越界访问产生错误。
2,函数会将源字符串的结束标志’\0’也会拷贝过去。
可以调试观察
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
 在打印时,遇到’\0’就结束,不要误以为该函数清空了原来的内容。
模拟实现(记得包含头文件assert.h)

char* _strcpy(char* dest, const char* src)
{
	char* ret = dest;//保存dest的首地址
	assert(dest != NULL);
	assert(src != NULL);
	while (*src!='\0')//\0之前全部OK
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;//\0也搞过来
	return ret;
}
strncpy

和strcpy不同的是,多了一个参数。
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记

 拷贝num个字节过去,如果源字符串已经没有元素了,就将dst后边的字节变成零。
函数功能展示:
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记


strcat

  • 参数:这个函数的参数和strcpy一模一样。
  • 功能:strcpy在目标字符串的开头拷贝源字符串,但strcat是在目标字符串的末尾,即结束标志’\0’位置开始将源字符串拷贝到目标字符串。
  • 返回值:和strcpy一样,返回目标字符串的指针。

功能呈现:
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
函数模拟实现:

char* _strcat(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest != NULL);
	assert(src != NULL);
	while (*dest)
	{
		dest++;
	}//找到目标字符串的末尾
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
strncat

和前边strcpy和strncpy的区别一样。
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
函数功能演示:
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记


strcmp

字符串比较函数
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记

  • 参数:两个,他们两个之间的比较
  • 功能:以两个字符串的每个字符以ASCII码值逐个比较
  • 第一个字符串如果大于第二个字符串,就返回大于零的数字。
  • 第一个字符串等于第二个字符串,就返回0。
  • 第一个字符串小于第二个字符串,就返回小于零的数字。
  • 返回值:上边已经说明。

函数功能呈现
f的ASCII在‘\0’之前。大于返回1(大于0的数)
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
如果等于返回零。
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
小于返回-1(小于0的数)
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
函数模拟实现

int _strcmp(const char* src, const char* dest)
{
	int ret = 0;
	assert(src != NULL);
	assert(dest != NULL);
	while (!(ret = *(unsigned char*)src - *(unsigned char*)dest) && *dest)
	{
		++src;
		++dest;
	}
	if (ret < 0)
	{
		return -1;
	}
	else if (ret > 0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
strncmp

不再是从头比较到尾,而是比较num个字符。
函数功能演示:
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记


strstr

C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记

  • 参数:传入两个字符指针。
  • 功能:在str1中找到str2第一次出现的位置。
  • 返回值:返回找到该位置的指针。如果没有找到,就返回NULL。

函数功能呈现
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
函数模拟实现

char* _strstr(const char* str1, const char* str2)
{
	char* cp = str1;
	char* s1, * s2;
	if (!*str2)
	{
		return str1;//如果str2为空,返回str1
	}
	while (*cp)
	{
		s1 = cp;
		s2 = str2;//传入参数不可以修改
		while (*s1 && *s2 && !(*s1 - *s2))
		{
			s1++;
			s2++;
		}
		if (!*s2)//如果跳出循环且s2已经是'\0’了。
		{
			return cp;
		}
		cp++;
	}
	return NULL;
}

strtok

C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记

  • 参数:第一个参数为目标字符串,第二个参数为分隔符集合
  • 函数功能:第一个参数即目标字符串是包含0个或者多个由分隔符分割而成的字符串。
     strtok会找到str中的一个标记,并将这个标记更改为\0,返回一个指向这个标记的指针(strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符创一般都是临时拷贝的内容且允许修改)。
     strtok函数的第一个参数不为NULL,函数将找到str中的第一个标记,strtok函数将保存他在字符串中的位置。
     如果函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
  • 返回值:如果目标字符串中不存在标记的分割字符,就返回NULL指针,如果找到,将该标记设置为结束标志\0。

函数功能展示
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
调试动图展示,会让你更加清晰了解函数的功能
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
上边是作者滴QQ,欢迎大家一起学习交流,嘿嘿。


strerror

C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
要使用这个函数,需要包含头文件<errno.h>

  • 函数参数:errnum–错误号,通常是errno
  • 函数功能:返回一个指向错误字符串的指针,该错误字符串描述了错误errnum。
  • 函数解释:这个函数会从内部搜索错误号,返回一个指向该错误信息字符串的指针,即错误消息字符在头文件中,程序运行时若有错误,strerror会捕获错误类型并返回一个指针,这个指针指向错误消息字符。

函数功能演示:
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
 由于当前文件内并没有heihei这个文件,以只读的方式打开搜索该文件是找不到的,所以返回的错误信息就是没有相关文件或者相关文件已经被销毁。
这里文件相关操作有遗忘的小伙伴可以移步文件超消息讲解来回顾回顾。


字符串大小写转换

strupr
  • 语法格式如下:
    strupr(字符串);(要注意,新的编译器规定使用该函数式要加上_)
  • 函数功能:将字符串中的小写字符转换成大写字母,其他字母不变。

函数功能实现:
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记

strlwr

格式相同,功能相反
演示如下:
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记


memcpy

C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记

  • 函数参数:目标字符串,源字符串,数量(unsigned int),void类型可以适配多种类型。
  • 函数功能:函数功能和strncpy很相似,只是memcpy可以操作的类型更加丰富,从源字符串首元素位置开始,向后拷贝num个字节的数据到目标字符串的位置,这个函数遇到’\0’不会停下来,且如果源字符串和目标字符串有重叠时,拷贝结果是未定义的。

例如,需要拷贝四个字节字符。而源字符串在目标字符串前3个子节的位置。
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
 本意是将1,2,3,4全部拷贝过去,然而在第一次拷贝时,元素1已经把元素4覆盖。
这与背后函数的实现有关,没有做重叠时的处理。
函数模拟实现如下:

void* _memcpy(void* dst, const void* src, size_t count)
{
	void* ret = dst;//记录目标数组的地址
	assert(dst);
	assert(src);
	while (count--)
	{
		*(char*)dst = *(char*)src;
		dst = (char*)dst + 1;
		src = (char*)src + 1;
	}
	return ret;
}

memmove

 函数memcpy存在重叠问题的话,memmove就是用来解决这个问题的,如果源空间和目标空间存在重叠的话,就得使用memmove函数处理。
函数格式和作用和momcpy一模一样。
函数功能呈现:
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
模拟实现:

void* _memmove(void* dst, const void* src, size_t count)
{
	void* ret = dst;
	if (dst <= src || (char*)dst >= ((char*)src + count))
	{
		while (count--)
		{
			*(char*)dst = *(char*)src;
			dst = (char*)dst + 1;
			src = (char*)src + 1;
		}
	}
	else//从后往前拷贝
	{
		dst = (char*)dst + count - 1;
		src = (char*)src + count - 1;
		while (count--)
		{
			*(char*)dst = *(char*)src;
			dst = (char*)dst - 1;
			src = (char*)src - 1;
		}
	}
}

memcmp

C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记

  • 两个数组(可以是字符数组,也可以是其他类型)相比,num个字节,void*可以适配多种类型。
  • 函数功能和strcmp一样,可以适配的类型更多了而已。

函数功能呈现:
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
整型四个字节,两个数组前两个元素相等,故返回值0。
C详细的字符串函数,c语言知识详解,c语言,开发语言,笔记
更改为12个字节,返回值就变为-1了。文章来源地址https://www.toymoban.com/news/detail-751448.html


到了这里,关于C详细的字符串函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【进阶C语言】字符函数和字符串函数(万文详解)

    前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。 字符串常量适用于那些对它不做修改的字符串函数. 今天将带来C语言函数的使用介绍 分为三部分供大家理解 如果这份博客对大家有帮助,希望

    2024年01月18日
    浏览(56)
  • 字符串函数(C语言详解)

    字符串是一串连续的且以\\0结尾的字符 注意: 1.以第一种形式初始化字符串时,计算机会自动在字符串末尾加上\\0,所以在给数组申请内存空间时,需要多申请一个字节的内存来存放\\0 2.第二种形式是 常量字符串 ,是 不可以被修改 的 3.第三种形式是字符数组,末尾没有\\0,输

    2024年03月17日
    浏览(35)
  • C语言——详解字符函数和字符串数组(上)

    目录 一、strlen的使用和模拟实现 1.strlen()函数的介绍 2.strlen()函数的具体使用 3.strlen函数的注意事项 4.strlen函数的模拟实现 二、strcpy的使用和模拟实现 1.strcpy()函数的介绍 2.strcpy()函数的具体使用 3.strcpy()函数的注意事项 4.strcpy函数的模拟实现 三、strcat 的使用和模拟实现  1

    2024年01月16日
    浏览(39)
  • 【C语言】字符函数与字符串函数以及内存函数 { 超详细攻略,一篇学会 }

    今日分享:字符、字符串函数和内存函数 内存函数 就是对内存进行操作的函数 字符串函数 就是对字符串进行操作的函数 字符函数 就是对字符进行操作的函数 str 前缀的函数是字符串函数,头文件string.h mem 前缀的函数是内存函数,头文件stdlib.h 字符分类函数包含在 ctype.h 头

    2024年03月18日
    浏览(45)
  • 【C语言】strcpy()函数(字符串拷贝函数详解)

    🦄 个人主页 :修修修也 🎏 所属专栏 :C语言 ⚙️ 操作环境 : Visual Studio 2022 目录  一.strcpy()函数简介 1.函数功能 2.函数参数 1.char * destination 2.const char * source 3.函数返回值 4.函数头文件 二.strcpy()函数的具体使用 1.使用strcpy()函数完成字符数组间的字符拷贝 2.使用strcpy()函数完成

    2024年02月03日
    浏览(34)
  • 【C语言】【字符串函数】【超详解】【下】!!!

    字符串函数【上】: 【C语言】【字符串函数】【超详解】【上】!!!-CSDN博客 前言: 在上一篇中,我们已经详细讲解了C语言字符串函数中用到最多的几种函数的使用及其模拟实现,本篇我们就将学习C语言字符串函数中,一些非常实用但稍有难度的几个字符串函数。 1、

    2024年03月18日
    浏览(42)
  • C语言——字符串函数(七千字详解)

    目录 1、字符串函数 长度不受限制的字符串函数 1.1strlen 注意事项: strlen函数的使用  strlen函数的模拟实现  1.2strcpy 注意事项: strcpy函数的使用  strcpy函数的模拟实现  1.3strcat 注意事项 strcat函数的使用 strcat函数的模拟实现  1.4strcmp strcmp的返回值 strcmp函数的使用 strcmp函数

    2024年02月04日
    浏览(30)
  • C语言:字符函数和字符串函数详解及部分函数的模拟实现(前篇)

    前言: C语言中对 字符和字符串 的处理很是频繁,但是C语言本身是没有字符串类型的, 字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数。 本篇文章将会 重点介绍处理字符和字符串的库函数的使用和注意事项。 strlen函数

    2024年02月06日
    浏览(34)
  • C语言 strtok字符串分割函数详解

    strtok 函数的作用是比较独特的,可以用来对字符串进行分割,对于我们获取命令或者数据集合后的数据处理是不可或缺的一步。但是详细介绍 strtok 的博文很少,而且linux手册的介绍也比较简单,这边写篇博文记录一下学习到的这个函数的用法。 函数定义如下: 即从字符串

    2024年02月12日
    浏览(34)
  • C语言之字符串,内存操作函数详解(一)

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C语言学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多C语言知识   🔝🔝 C语言的标准库为我们提供了丰富的字符串操作函数与内存操作函数,有我们熟悉的 strlen ,strcpy ,也有我们不熟悉的 strchr , strstr 等

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包