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 ...
随机推荐
- Java标识符
相关内容: JAVA标识符: 定义 组成规则 常见的命名规则 包 类和接口 方法.变量 常量 首发时间:2017-06-22 20:40 修改时间: 2018-03-16 14:01 :修改了标题,修 ...
- python 复制文件到其他路径
#!/usr/bin/env/python # -*- coding: utf-8 -*- # @Time : 2018/11/7 16:34 # @Author : ChenAdong # @Ema ...
- mysql 建立索引的原则(转)
索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑,下面给出实际中的一些通用的原则: 1. 在经常用作过滤器的字段上建立索引: 2. ...
- 如何在 Azure 中均衡 Windows 虚拟机负载以创建具有高可用性的应用程序
负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性. 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性. 你将学习如何执行以下操作: 创建 Azure 负载 ...
- 转:Web 开发中很实用的10个效果【附源码下载】
原文地址:http://www.cnblogs.com/lhb25/p/10-useful-web-effect.html 在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多 ...
- git命令:全局设置用户名邮箱配置
1.查看git配置信息 git config --list 2.查看git用户名 git config user.name 3.查看邮箱配置 git config user.email 4.全局配置用 ...
- 写Ansible playbook添加zabbix被监控的对象
本主题达到的效果是能通过编写Ansible Playbook,创建zabbix主机组,把被监控的对象加入到zabbix监控系统中,同时链接到对象的模板. 1.准备工作 在zabbix服务器上面,我们需 ...
- ConcurrentModificationException探究
modCount ? 在ArrayList,LinkedList,HashMap等等的内部实现增,删,改中我们总能看到modCount的身影,modCount字面意思就是修改次数 // HashMap ...
- 乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array
乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array 一.前言 将传统的问题进行一些稍微的变形,这个时候我们可能无所适从了,因此还是实践出真知, ...
- 一些安卓模拟器的IP问题和getOutputStream();关于connect();的函数异常的问题
ip问题 1.不能使用local host 和127.0.0.1作为本地服务器的地址,而网上无论10.0.0.2还是10.0.2.2的8080端口都无法访问.真正的地址应该在CMD 键入ipconfi ...