短的搞笑的名人趣事:C字符串操作函数 - Wirlfly‘s Blog - linux,unix,开源世界,生活感触
来源:百度文库 编辑:偶看新闻 时间:2024/05/04 17:14:16
1.常用的函数
引用
#include < string.h >
size_t strlen(const char *s);
int strcmp(const char *s1, const char *s2);
char *strcpy(char *dest, const char *src);
char *strcat(char *dest, const char *src);
char *strchr(const char *s, int c);
char *strrchr(const char *s, int c);
char *strstr(const char *haystack, const char *needle);
2.限定长度的比较,拷贝和追加函数
引用
int strncmp(const char *s1, const char *s2, size_t n);
char *strncpy(char *dest, const char *src, size_t n);
char *strncat(char *dest, const char *src, size_t n);
3.很有用, 但很多人没有用过的函数
引用
size_t strcspn(const char *s, const char *reject);
size_t strspn(const char *s, const char *accept);
char *strpbrk(const char *s, const char *accept);
/* 非线程安全,若要求线程安全,则使用 strtok_r() */
char *strtok(char *s, const char *delim);
4.下面的一些函数不在C语言的标准里面, 但是在UNIX环境下相当普遍
引用
/* 和 strtok() 的功能相关,但又有所不同. */
char *strsep(char **stringp, const char *delim);
/* 复制一个字符串,用完之后需要free(). */
char *strdup(const char *s);
int strcasecmp(const char *s1, const char *s2);
int strncasecmp(const char *s1, const char *s2, size_t n);
char *index(const char *s, int c); /* 功能同 strchr(), 建议使用 strchr() */
char *rindex(const char *s, int c); /* 功能同 strrchr(), 建议使用 strrchr() */
5.GNU 提供的一些字符串函数, 在Linux(也许FreeBSD也行)下可用, 直接使用下列函数,而不是自己编写功能雷同或类似的函数
引用
char *stpcpy(char *dest, const char *src);
char *stpncpy(char *dest, const char *src, size_t n);
size_t strnlen(const char *s, size_t maxlen);
char *strdupa(const char *s);
char *strndup(const char *s, size_t n);
char *strndupa(const char *s, size_t n);
常见不良习惯
1.对同一字符串,多次调用strlen().
strlen()是一个很昂贵的操作,字符串越长越昂贵,所以应该只调用一次,如果下次要使用该值,则将其存到一个变量中.
2.大量使用 strcat()
每调用一次strcat(), 其内部调用strlen()一次,代价很高昂.
3.使用strncpy()拷贝字符串,并且n很大,实际的字符串经常很短
如果源字符串长度(设为m)短于n,则拷贝之后的目标字符串后面的(n-m)字节内存会被memset()为0,很多时候我们的程序是不需要这种功能的.但如果这确实是你需要的,那没有问题.另外,注意,如果m大于等于n, 则目标字符串末尾不会添加‘\0‘.
4.自己编写与上节所列函数功能雷同或类似的函数
很多人不知道上述一些函数,当需要类似功能的时候,则自己编写. 99%的情况是,自己编写的函数比上述函数慢,容易产生bug, 别人不易理解.
5.自己编写的字符串操作函数,参数应该加const的没有加
很多时候我们需要自己编写函数操作字符串,该函数并不会修改传入的字符串参数,就应该在参数前加const限定符.
引用
#include < string.h >
size_t strlen(const char *s);
int strcmp(const char *s1, const char *s2);
char *strcpy(char *dest, const char *src);
char *strcat(char *dest, const char *src);
char *strchr(const char *s, int c);
char *strrchr(const char *s, int c);
char *strstr(const char *haystack, const char *needle);
2.限定长度的比较,拷贝和追加函数
引用
int strncmp(const char *s1, const char *s2, size_t n);
char *strncpy(char *dest, const char *src, size_t n);
char *strncat(char *dest, const char *src, size_t n);
3.很有用, 但很多人没有用过的函数
引用
size_t strcspn(const char *s, const char *reject);
size_t strspn(const char *s, const char *accept);
char *strpbrk(const char *s, const char *accept);
/* 非线程安全,若要求线程安全,则使用 strtok_r() */
char *strtok(char *s, const char *delim);
4.下面的一些函数不在C语言的标准里面, 但是在UNIX环境下相当普遍
引用
/* 和 strtok() 的功能相关,但又有所不同. */
char *strsep(char **stringp, const char *delim);
/* 复制一个字符串,用完之后需要free(). */
char *strdup(const char *s);
int strcasecmp(const char *s1, const char *s2);
int strncasecmp(const char *s1, const char *s2, size_t n);
char *index(const char *s, int c); /* 功能同 strchr(), 建议使用 strchr() */
char *rindex(const char *s, int c); /* 功能同 strrchr(), 建议使用 strrchr() */
5.GNU 提供的一些字符串函数, 在Linux(也许FreeBSD也行)下可用, 直接使用下列函数,而不是自己编写功能雷同或类似的函数
引用
char *stpcpy(char *dest, const char *src);
char *stpncpy(char *dest, const char *src, size_t n);
size_t strnlen(const char *s, size_t maxlen);
char *strdupa(const char *s);
char *strndup(const char *s, size_t n);
char *strndupa(const char *s, size_t n);
常见不良习惯
1.对同一字符串,多次调用strlen().
strlen()是一个很昂贵的操作,字符串越长越昂贵,所以应该只调用一次,如果下次要使用该值,则将其存到一个变量中.
2.大量使用 strcat()
每调用一次strcat(), 其内部调用strlen()一次,代价很高昂.
3.使用strncpy()拷贝字符串,并且n很大,实际的字符串经常很短
如果源字符串长度(设为m)短于n,则拷贝之后的目标字符串后面的(n-m)字节内存会被memset()为0,很多时候我们的程序是不需要这种功能的.但如果这确实是你需要的,那没有问题.另外,注意,如果m大于等于n, 则目标字符串末尾不会添加‘\0‘.
4.自己编写与上节所列函数功能雷同或类似的函数
很多人不知道上述一些函数,当需要类似功能的时候,则自己编写. 99%的情况是,自己编写的函数比上述函数慢,容易产生bug, 别人不易理解.
5.自己编写的字符串操作函数,参数应该加const的没有加
很多时候我们需要自己编写函数操作字符串,该函数并不会修改传入的字符串参数,就应该在参数前加const限定符.
C语言字符串处理函数
C语言字符串比较函数的问题
C语言中函数如何返回字符串?
从一个字符串取一个字符 c函数
C语言如何在两个函数之间传送字符串
用C语言写一个函数,将两个字符串连接。
不用MFC、STL和C的字符串处理函数还有什么处理字符串的方法?
编写一个函数reverse(s),它实现对字符串S到排
编写一个函数reverse(s),它实现对字符串S到排
编写一个函数reverse(s),它实现对字符串S到排
编写一个函数reverse(s),它实现对字符串S倒排
编写一个函数reverse(s),它实现对字符串S倒排
C语言编程:用自定义函数实现字符串处理函数strcat、 strcpy、strcmp、strlen和
写出int strlen(char *s)的函数实现求字符串长度.
excel 字符串查找函数
C语言里%s不是字符串么 那%几点几s是什么意思啊
编写函数count(s),该函数的功能是:统计字符串中英文小写字母的个数。~~~~做个实验报告!
编写函数void fun(char *s),功能是:把形参s所指字符串中下标为奇数的字
[c]下面程序的功能是将字符串s中所有的字符c删除。。。
函数s=f(t)的导数为C-s(t),求原函数
XSL字符串操作问题
字符串的操作
java 字符串操作!
用C++的方法写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串