//使用字符串操作应时刻注意字符串或者数组长度!!避免溢出!!

1.

  size_t strlen(char const *str); //计算字符串长度, 注意返回size_t类型的值, 即unsigned int类型, 所以strlen(str1) - strlen(str2) >= 0永远是正确的(两个unsigned int相操作不会进行强制类型转换)!

  |double <- float

  |long

  |unsigned int

  |int <- short, char

2.

  char *strcpy(char *dst, char const *src); //复制一个字符串src到dst, 因为dst参数将进行修改, 所以它必须是个字符数组或者是一个指向动态分配内存的数组的指针, 不能使用字符串常量的指针; strcpy无法判断目标字符数组的长度, 所以要保证dst可以容纳src及最后的NULL, 否则存储于dst之后的内存空间也将被使用

  char *strncpy(char *dst, char const *src, size_t len); //复制src的len个字符到dst, 如果strlen(src)的值小于len, 则用NULL填充到len长度

3.

  char *strcat(char *dst, char const *src); //找到dst的末尾, 并把src字符串的一份拷贝添加到这个位置, 所以dst也必为数组或者一个指向动态分配内存的数组的指针!

  char *strncat(char *dst, char const *src, size_t len); //与strncpy不同的是从src复制len个字符到dst后会在dst字符串后添加一个NULL字节, 而且不会像strncpy那样对目标数组用NULL字节进行填充

4.

  int strcmp(char const *str1, char const *str2); //比较两个字符串大小, 如果str1 < str2就返回一个小于零的值, 如果str1 > str2就返回一个大于零的值, 如果相等就返回零, 注意大于零, 小于零并不代表值为1或-1

  int strncmp(char const *str1, char const *str2, size_t len); //比较两个字符串的前n大小

5.

  char *strchr(char const *str, int ch); //在字符串str中查找字符ch第1次出现的位置, 找到后返回一个指向该位置的指针, 否则返回NULL

6.

  char *strrchr(char const *str, int ch); //与strchr不同的是从后往前查找第一次出现的位置

7.

  char *strpbrk(char constr *str, char const *group); //查找任何一组字符第一次在字符串中出现的位置, 并返回位置的指针 如 p = strpbrk("Hello John!", "aeiou")

8.

  char *strstr(char const *str1, char const *str2); //查找str2第一次在str1中出现的位置, 并返回一个该位置的指针, 否则返回NULL, 若第二个参数为空字符串, 则返回str1

//标准库中并不存在strrstr或strrpbrk函数, 但是可以自己实现

9.

  size_t strspn(char const *str, char const *group); //从字符串str起始位置计算包含group字符的个数, 直到碰到不属于group的字符为止

  size_t strcspn(char const *str, char const *group); //与strspn相反, c来源于求补这个概念

10.

  char *strtok(char *str, char *sep); //以字符串sep切割str, 仅在第一次调用strtok()函数时使用str, 在首次调用后仅需要sep参数, 将str改为NULL即可, 因为它清楚自己在当前函数中所在的位置; strtok会修改原字符串, 在str中查找包含在sep中的字符并用'\0'来替换, 直到找遍整个字符串;

#include <stdio.h>
#include <string.h> int main(void) {
char str[] = "My name is John!";
printf("%s\n", strtok(str, " "));
printf("%s\n", strtok(NULL, " "));
printf("%s\n", strtok(str, " "));
printf("%s\n", str);
return ;
}

  执行以上代码后返回

    My

    name

    My

    My

  说明strtok修改了字符串, 如果首次调用后第一个参数不用NULL, 则从头开始截取相应字符串

11.

  char *strset(char *str, int c); 修改str中所有字符为c

  char *strnset(char *str, int c, size_t count); 把str中的前count个字符修改为字符c

12.

  以下都是VC中的, Linux中并不能使用, 只能自定义

  char *strrev(char *str); //反转字符串

  char *_strupr(char *str); //转换为大写

  char *_strlwr(char *str); //转换为小写

13.

  内存操作字符串, 与str系列函数不同的是字符串里可以含有NULL或者'\0', 但是碰到不会结束, n为字节

  任何类型的指针都可以转换为void类型指针

  void *memcpy(void *dst, void const *src, size_t n); //类似strcpy, 但是不会碰到'\0'就返回

  void *memmove(void *dst, void const *src, size_t n); //比memcpy处理慢, 但是如果dst和src重叠的话用此函数

  void *memcmp(void const *str1, void const *str2, size_t n); //比较字符串

  void *memchr(void const *str, int c, size_t n); //查找单个字符

  void *memset(void *str, int c,, size_t n); //设置字符串

  如果要在两个整数数组间操作的话(比如memcpy)n为sizeof(src), 如果要指定个数则n * sizeof(src[0])

C-常用字符串操作函数详解的更多相关文章

  1. MYSQL常用内置函数详解说明

    函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...

  2. [转载]c++常用字符串操作函数

    原文地址:c++常用字符串操作函数作者:Valsun 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source ...

  3. C语言的常用字符串操作函数(一)

    一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...

  4. mysql常用字符串操作函数大全,以及实例

    今天在论坛中看到一个关于mysql的问题,问题如下 good_id     cat_id12654         665,56912655         601,4722 goods_id是商品i ...

  5. day3字符串操作作业详解

    1.day3题目 1.有变量name = "aleX leNb" 完成如下操作: 1) 移除 name 变量对应的值两边的空格,并输出处理结果 2) 移除name变量左边的&quo ...

  6. VB常用字符串操作函数

    1. ASC(X),Chr(X):转换字符字符码 [格式]: P=Asc(X) 返回字符串X的第一个字符的字符码 P=Chr(X) 返回字符码等于X的字符 [范例]: (1)P=Chr(65) ‘ 输 ...

  7. PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)

    /*常用的字符串输出函数 * * echo() 输出字符串 * print() 输出一个或多个字符串 * die() 输出一条信息,并退出当前脚本 * printf() 输出格式化字符串 * spri ...

  8. C-I/O操作函数详解

    EOF: End Of File, 文字流结尾, 这里的文字流可以是文件(file), 也可以是标准输入(stdin), 它的值在任何可能出现的字符之外(-1) 先列出三种基本类型操作函数 这里面返回 ...

  9. c语言文件操作函数详解

    一.文件操作注意点: 1 打开文件时,如果打开方式加“+”,表示该文件可以“写” ; 2 退出程序一般用exit函数,正常退出参数为0,非正常退出参数为正零值 ; 3 文件的读写操作:按字符.字符串. ...

随机推荐

  1. Iptables静态防火墙基础教程

    文章目录检查Iptables是否安装Iptables相关的文件配置Iptables规则自定义规则保存规则 Iptables对于刚入门Linux的新手都比较难理解和配置.但是如果你掌握了其中的诀窍,你就 ...

  2. hadoop安装入门

    1.jdk安装和配置 1.1下载最新jdk文件 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-18802 ...

  3. Spring9 : Autowire(自动装配)机制

    原文出处: 五月的仓颉 为什么Spring要支持Autowire(自动装配) 先写几个类,首先定义一个Animal接口表示动物: 1 2 3 4 5 public interface Animal { ...

  4. Ubuntu下设置服务自启动

    Ubuntu下设置服务自启动 一般/etc下可能还有/etc/rc.local,/etc/rc.sysinit文件,一般/etc/rc.local默认并不做什么实事,可能是系统留下的一个接口,供用户添 ...

  5. Multi-label && Multi-label classification

    Multi-label classification with Keras In today’s blog post you learned how to perform multi-label cl ...

  6. Android循环ViewPager(二)

    上午没事写了一篇,下午有事,晚上回来看看感觉写的差点意思,上篇文章大概的关于循环是自己添加了两个空的View,看到网上还有一种就是在自定义的Adapter中getCount中返回最大值,然后destr ...

  7. HP Onboard Administrator 固件升级

    HP Onboard Administrator是HP公司服务器的远程管理平台.更新是一个非常简单的过程,可以完全通过办公自动化web管理界面. 1. 下载所需二进制文件 下载地址:HP BladeS ...

  8. 转: Nginx proxy讲解精华文章集

    1. 详细,参数说明很好 https://blog.lyz810.com/article/2016/06/ngx_stream_proxy_module_doc_zh-cn/

  9. POJ2762 Going from u to v or from v to u? 强连通+缩点

    题目链接: poj2762 题意: 给出一幅单向图.问这张图是否满足   随意两点ab 都能 从a到达b 或  从b到达a 题解思路: 推断一幅图是否满足弱连通 首先想到的是将图中的 强连通分量(能互 ...

  10. Oracle查询client编码集

    Oracle查询client编码集 SQL> select userenv('language') from dual; USERENV('LANGUAGE') ---------------- ...