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使用技巧系列文章:


欢迎大家关注我的个人博客

或微信扫码关注我的公众号

C标准库string.h中几个常用函数的使用详解的更多相关文章

  1. c++ <string.h>中包括哪些常用函数

    常用函数如下:strlen  求字符串长度strcmp  比较2个字符串是否一样strcat           字符串连接操作strcpy            字符串拷贝操作strncat     ...

  2. C 标准库 - string.h

    C 标准库 - string.h This header file defines several functions to manipulate C strings and arrays. stri ...

  3. C标准库<string.h>实现

    本文地址:http://www.cnblogs.com/archimedes/p/c-library-string.html,转载请注明源地址. 1.背景知识 <string.h>中声明的 ...

  4. C 标准库 - string.h之memmove使用

    memmove Move block of memory Copies the values of num bytes from the location pointed by source to t ...

  5. C 标准库 - string.h之memcmp使用

    memcmp Compare two blocks of memory. Compares the first num bytes of the block of memory pointed by ...

  6. C 标准库 - string.h之memchr使用

    memchr Locate character in block of memory,Searches within the first num bytes of the block of memor ...

  7. C 标准库 - string.h之strlen使用

    strlen Returns the length of the C string str. The length of a C string is determined by the termina ...

  8. C 标准库 - string.h之strpbrk使用

    strpbrk Locate characters in string,Returns a pointer to the first occurrence in str1 of any of the ...

  9. C 标准库 - string.h之strrchr使用

    strrchr Locate last occurrence of character in string, Returns a pointer to the last occurrence of c ...

随机推荐

  1. DevOps之技能面

    <教学手册(Teaching Manual)> 教学:人类培养态度.传授知识.训练技能的活动.教学目的:知识与技能的层次:(了解.理解.熟悉.掌握.精通).教学手段:理论与实践的方面:(科 ...

  2. 如何使用 Packer 在 Azure 中创建 Windows 虚拟机映像

    Azure 中的每个虚拟机 (VM) 都是基于定义 Windows 分发和操作系统版本的映像创建的. 映像可以包括预安装的应用程序和配置. Azure 应用商店为最常见的操作系统和应用程序环境提供了许 ...

  3. php notes

    1. foreach中的引用 <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * ...

  4. jQuery为元素设置css的问题

    例子: 有如下的html代码 对文本框设置字体大小为20px ,即font-size:20px 首先会想到如下: $('input').css({font-size:'20px'}); 由于属性不能使 ...

  5. sysbench使用

      1 部署 1.1 官方主页 https://github.com/Percona-Lab/sysbench-tpcc https://github.com/akopytov/sysbench 1. ...

  6. WPScan扫描Wordpress漏洞

    一.什么是Wpscan?什么是Wordpres? 1.Wpscan WPScan是一个扫描WordPress漏洞的黑盒子扫描器,可以扫描出wordpress的版本,主题,插件,后台用户以及爆破后台用户 ...

  7. git常用命令合集(持续完善)

    git常用命令合集(持续更新,仅为便于查阅) 上传整个项目 git init git add 项目名 git commit -m "提交的注释信息" 若已经绑定远程仓库,则直接:g ...

  8. Markdown基本语法规范

    1. 标题 #的个数即表示Hn, 一下依次从h1~h6.  也可在句尾添加同样个数的#(也可忽略) # This is H1 ## This is H2 ### This is H3 #### Thi ...

  9. Android Studio运行找不到Genymotion虚拟机

    如图: 在Genymotion->Settings下ADB选项卡下选择使用SDK工具: 完成后试试吧

  10. OC4J Configuration issue. /u01...dbhome_1/oc4j/j2ee/OC4J_DBConsole_orcl-db-01_orcl not found.

    emctl start dbconsole 报错信息: OC4J Configuration issue. /u01/app/Oracle/product/11.2.0/dbhome_1/oc4j/j ...