C标准库string.h中几个常用函数的使用详解
strlen
计算字符串长度
size_t strlen(const char *str)
计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
函数实现:
int Strlen(const char *str)
{
	assert(str);
	int len = 0;
	while ((*str++) != '\0')len++;
	return len;
}
strcpy
字符串复制
char *strcpy(char *dest, const char *src)
把 src 所指向的字符串复制到 dest。
函数实现:
char *Strcpy(char *dst, const char *src)
{
	assert(dst && src);
	char *tmp = dst;
	while ((*dst++ = *src++) != '\0');
	return tmp;
}
strncpy
复制连续的n个字符
char *strncpy(char *dest, const char *src, size_t n)
把 src 所指向的字符串复制到 dest,最多复制 n 个字符。
函数实现:
char *Strncpy(char *dst, const char *src, int len)
{
	assert(dst&&src);
	char *tmp = dst;
	int offset = 0;
	if (len > strlen(src))
	{
		offset = len - strlen(src);
		len = strlen(src);
	}
	while (len--)
	{
		*dst++ = *src++;
	}
	while (offset--)
	{
		*dst++ = '\0';
	}
	return tmp;
}
strcat
把一个字符串连接到另一个字符串后面
char *strcat(char *dest, const char *src)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
函数实现:
char *Strcat(char *dst, const char* src)
{
	assert(dst && src);
	char *tmp = dst;
	while (*dst++);
	dst--;
	while (*dst++ = *src++);
	return tmp;
}
strncat
把连续的n个字符连接到另一个字符串后面
char *strncat(char *dest, const char *src, size_t n)
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
函数实现:
char *Strncat(char *dst, const char* src, int len)
{
	assert(dst && src);
	char *tmp = dst;
	while (*dst++);
	dst--;
	while (len--)
	{
		*dst++ = *src++;
	}
	*dst = '\0';
	return tmp;
}
示例:
#include <stdio.h>
#include <string.h>
int main(void)
{
    char str0[20] = "Test:";
    char str1[20] = "Welcome9999";
    char str2[20] = " To ";
    char str3[20] = "0123Beijing55";
    char tmp[100];
    strcpy(tmp, str0);
    puts(tmp);      //Test:
    strncpy(tmp, str1, 7);  //取st1前7个字符
    puts(tmp);      //Welcome
    strcat(tmp, str2);      //连接str2
    puts(tmp);
    strncat(tmp, str3 + 4, 7);  //取str3+4之后的7个字符
    puts(tmp);
    return 0;
}
输出结果:

strchr
查找某字符在字符串中首次出现的位置指针,如果不存在则返回NULL
char *strchr(const char *str, int c)
在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。
函数实现:
char* My_strchr(char *s, char c)
{
    while(*s != '\0' && *s != c)
    {
        ++s;
    }
    return *s==c ? s : NULL;
}
示例:
#include <string.h>
#include <stdio.h>
int main(void)
{
    char string[20] = "This is a string";
    char *ptr1, *ptr2;
    char c1 = 'r', c2 = 'b';
    ptr1 = strchr(string, c1);
    ptr2 = strchr(string, c2);
    if(ptr1)
        printf("字符1:%c 的位置是: %s \n",c1,ptr1);
    else
        printf("字符1:%c 未找到 \n", c1);
    if(ptr2)
        printf("字符2:%c 的位置是: %s \n",c2,ptr2);
    else
        printf("字符2:%c 未找到 \n", c2);
    return 0;
}
输出结果:

strcmp
字符串比较
int strcmp(const char *str1, const char *str2)
把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
设这两个字符串为str1,str2,
若str1=str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
函数实现:
int Strcmp(char const *s1, char const *s2)
{
	assert(s1&&s2);
	while (*s1 == *s2 && *s1 != '\0' && *s2 != '\0')
	{
		s1++;
		s2++;
	}
	if (*s1 == *s2)
	{
		return 0;
	}
	else if (*s1 > *s2)
	{
		return 1;
	}
	return -1;
}
示例:
#include <string.h>
#include <stdio.h>
int main(void)
{
    char str1[20] = "abc";
    char str2[20] = "abc";
    char str3[20] = "bbc";
    int r1, r2, r3;
    r1 = strcmp(str1, str2);
    r2 = strcmp(str1, str3);
    r3 = strcmp(str3, str1);
    printf("r1 = %d, r2 = %d, r3 = %d \n", r1, r2, r3);
    return 0;
}
输出结果:

strstr
字符串查找
char *strstr(const char *haystack, const char *needle)
在字符串 haystack 中查找第一次出现字符串 needle(不包含空结束字符)的位置。
函数实现:
char *Strstr(char const *s1, char const *s2)
{
	assert(s1&&s2);
	const char *ps1, *ps2;
	ps1 = s1;
	ps2 = s2;
	while (*ps1)
	{
		const char *tmp = ps1;
		while (*tmp++ == *ps2++);
		if (*ps2 == '\0')
		{
			return (char*)ps1;
		}
		ps2 = s2;
		ps1++;
	}
	return NULL;
}
strncmp
int strncmp(const char *str1, const char *str2, size_t n)
把 str1 和 str2 进行比较,最多比较前 n 个字节。
函数实现:
int Strncmp(char const *s1, char const *s2, int len)
{
	assert(s1&&s2);
	while (len-- && *s1 == *s2 && *s1 != '\0' && *s2 != '\0')
	{
		s1++;
		s2++;
	}
	return *s1 - *s2;
}
memcpy
内存复制
void *memcpy(void *dest, const void *src, size_t n)
从 src 复制 n 个字符到 dest。
函数实现
void *Memcpy(char *dst, char const *src, int len)
{
	assert(dst && src);
	char *tmp = dst;
	const char *s = src;
	while (len--)
	{
		*dst++ = *src;
	}
	return tmp;
}
Jlink使用技巧系列文章:
- Jlink使用技巧之合并烧写文件
 - Jlink使用技巧之烧写SPI Flash存储芯片
 - Jlink使用技巧之虚拟串口功能
 - Jlink使用技巧之读取STM32内部的程序
 - Jlink使用技巧之单独下载HEX文件到单片机
 - Jlink使用技巧之J-Scope虚拟示波器功能
 
欢迎大家关注我的个人博客
或微信扫码关注我的公众号

C标准库string.h中几个常用函数的使用详解的更多相关文章
- c++ <string.h>中包括哪些常用函数
		
常用函数如下:strlen 求字符串长度strcmp 比较2个字符串是否一样strcat 字符串连接操作strcpy 字符串拷贝操作strncat ...
 - C 标准库 - string.h
		
C 标准库 - string.h This header file defines several functions to manipulate C strings and arrays. stri ...
 - C标准库<string.h>实现
		
本文地址:http://www.cnblogs.com/archimedes/p/c-library-string.html,转载请注明源地址. 1.背景知识 <string.h>中声明的 ...
 - C 标准库 - string.h之memmove使用
		
memmove Move block of memory Copies the values of num bytes from the location pointed by source to t ...
 - C 标准库 - string.h之memcmp使用
		
memcmp Compare two blocks of memory. Compares the first num bytes of the block of memory pointed by ...
 - C 标准库 - string.h之memchr使用
		
memchr Locate character in block of memory,Searches within the first num bytes of the block of memor ...
 - C 标准库 - string.h之strlen使用
		
strlen Returns the length of the C string str. The length of a C string is determined by the termina ...
 - C 标准库 - string.h之strpbrk使用
		
strpbrk Locate characters in string,Returns a pointer to the first occurrence in str1 of any of the ...
 - C 标准库 - string.h之strrchr使用
		
strrchr Locate last occurrence of character in string, Returns a pointer to the last occurrence of c ...
 
随机推荐
- webpack+sass+vue 入门教程(三)
			
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
 - Oracle EBS OPM reshedule batch
			
--reschedule_batch --created by jenrry DECLARE x_message_count NUMBER; x_message_list VARCHAR2 (2000 ...
 - Linux查看系统负载(CPU和MEM考虑)
			
查看占用CPU最高的10个进程 [tidb@:vg_adn_tidbCkhsTest:| head mysql ? Sl Nov22 : /usr/local/mysql/bin/mysqld --b ...
 - python 计时器
			
今天做自动化界面工具的时候需要用到计时器,查阅了一下,发现以下的这位博友写的很简洁方便且实用 https://blog.csdn.net/qfxx_CSDN/article/details/81412 ...
 - 2018.09.01 09:08 Genesis
			
Nothing to think about, I don't know where to start, the mastery of learning is not an easy task, yo ...
 - 基于Java反射的map自动装配JavaBean工具类设计
			
我们平时在用Myabtis时不是常常需要用map来传递参数,大体是如下的步骤: public List<Role> findRoles(Map<String,Object> p ...
 - Linux下升级openssl
			
公司由于使用第三方漏洞扫描,检测出openssh存在漏洞,升级openssh后仍无效果,于是升级openssl 系统信息: 依赖软件:make.gcc.zlib1g-dev 升级步骤: 1.去官网下载 ...
 - [转][solr] - 索引数据删除
			
删除solr索引数据,使用XML有两种写法: 1) <delete><id>1</id></delete> <commit/> 2) < ...
 - R语言(资源)
			
#学习 R 的方法 知识和耐心,是成为强者的唯一方法. - 通过阅读来学习.包括了阅读经典的教材.代码.论文.学习公开课.- 通过牛人来学习.包括同行的聚会.讨论.大牛的博客.微博.twitter.R ...
 - iosclient发现_世界杯送流量活动项目总结
			
世界杯如火如荼的进行.视频站点相似于门户站点.须要高速依据外部环境更新内容. 产品经理须要策划活动,并安排实施.这个活动就是在这样背景下产生的,爱奇艺与运营商合作,实现双赢.爱奇艺能够通过运营商 ...