码迷,mamicode.com
首页 > 其他好文 > 详细

C字符串处理函数

时间:2017-04-11 01:04:15      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:错误   iss   format   空白   char s   覆盖   长整型   输出   main   

部分参考百科。

C常用字符串函数:字符串输入函数,字符串输出函数,字符串处理函数,标准输入输出流

字符串处理函数:

1、字符串长度:strlen(str),返回字符串实际长度,不包括‘\0‘,返回值类型为size_t。

2、字符串拼接:strcat(str1,str2),str2拼接到str之后,如果str1长度不够大,将会溢出,覆盖str1之后的数据;

                      strncat(str1,str2,n),拼接str2中指定长度n的数据到str1中。

3、字符串对比:strcmp(str1,str2),对比str1和str2中的数据内容是否完全相等,是返回0,否则返回非零值。

                      strncmp(str1,str2,n),对比str2中的前n位和str1是否相等。//int temp = strncmp("111"4, "111555555", 3);//相等为0   3指的是str2里面的前三位

4、字符串拷贝:strcpy(str1,str2),str2中的数据copy到str1中,str1和str2所指内存区域不可以重叠且str1必须有足够的空间来容纳str2的字符串,str1先清零然后将str2的内容copy进

str1,str1长度不足的话程序会崩溃。

                      strncpy(str1,str2,n),str2指定长度n的数据copy到str1。

5、字符串查找:strchr(str,c),查找字符c在字符串str中首次出现的位置,成功则返回要查找字符第一次出现的位置,失败返回NULL。

                      strrchr(str,c),查找字符c在字符串str中最后一次出现的位置,成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。

                      strstr(str1,str2),判断str2是否是str1的子串,如果是返回str2在str1中首次出现的地址,失败返回NULL。

                      strpbrk(str1,str2),在str1中找出str2任一字符首次出现的位置并返回第一个满足条件的字符指针,失败返回NULL。

6、字符串转换:atoi(str),字符串转换成整形数据,头文件#include<stdlib.h>。函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( )函数来检测),

直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(‘\0‘)才结束转换,并将结果返回。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 NULL。

                     atof().atol()参考atoi()。

                      long int strtol(const char *nptr,char **endptr,int base);strtol函数会将参数nptr字符串根据参数base来转换成长整型数。

                      a.参数base范围从2至36,或0(10进制)

                      b.endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符.eg:   char *pos; strtol("123abc", &pos, 10);strtol返回123,pos指向字符串中的字母a。

                         参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回;若参数endptr为NULL,则会不返回非法字符串。

                      double strtod(const char *nptr,char **endptr);字符串转换成浮点数据。

7、字符串格式化输出:sprintf(char* buffer,const char*formt,[agrument],...),buffer:将要写入的字符串缓冲区,format:格式化字符串,,[agrument],...:可选参数,可以是任何类型的数据。

                               如果成功返回写入buffer 的字符数,结束字符‘\0’不计入内,出错则返回-1.

                               如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1。

                              第二个参数中会写入除格式外的数据到buffer,如 int num=sprintf(buffer,"string:%s\n",20); buffer中会存储‘s‘,‘t‘,‘r‘,‘i‘,‘n‘,‘g‘,‘:‘,‘\n‘,‘\0‘

                                                                                                num+=sprintf(buffer,"char:%c\n",c);   buffer中会存储‘s‘,‘t‘,‘r‘,‘i‘,‘n‘,‘g‘,‘:‘,‘\n‘,‘c‘,‘h‘,‘a‘,‘r‘,‘:‘,‘c‘,‘\n‘,‘\0‘

 

 

附测试代码如下:(编译器vs2015)

#define _CRT_SECURE_NO_WARNINGS

#include <string.h>

#include<stdio.h>

#include<stdlib.h>

#define STRLEN 255

int main()

{

      char *str = "1234444555";              //常量区,无法修改值  

      char strarr[] = "111222333444";  

      char strcarrier[STRLEN] = { 0 };

 

      size_t szlen = strlen(strarr);         //12  

      size_t arrayles = sizeof(strarr);      //13

 

   //strcat(str, strarr);  //错误,往某位置写入时发生访问冲突 str存储在常量区

      if ((strlen(strarr) + strlen(str) - 1) <= sizeof(strarr))  

            {   

                  strcat(strarr, str);    //风险的行为,字符串溢出,覆盖straar之后的空间

            }    

 

      strcat(strcarrier, str);

      strcat(strcarrier, strarr);

 

      memset(strcarrier, 0, STRLEN);

 

      strncat(strcarrier, str, 5);//截取后面str中的数据,长度为5  

      strncat(strcarrier, str, STRLEN-strlen(strcarrier));//最大长度STRLEN-strlen(strcarrier)

 

      memset(strcarrier, 0, STRLEN);

 

      strcpy(strcarrier, strarr);//str1的长度大于str2的长度,str1先清零然后将str2的内容copy进str1

      int temp = strcmp(strcarrier, str);

      temp = strcmp(strcarrier, strarr);  

      temp = strncmp(strcarrier, "333", 5);//非零值  

      temp = strncmp(strcarrier, "111555555", 3);//相等为0   3指的是str2里面的前三位

 

      memset(strcarrier, 0, STRLEN);

 

      strncpy(strcarrier, "1122334455", 3);

 

      memset(strcarrier, 0, STRLEN);

      strcpy(strcarrier, str);

      temp = int(strchr(strcarrier, ‘4‘));//返回的是首次出现的指针

      temp = int(strrchr(strcarrier, ‘4‘));  

      temp = int(strstr(strcarrier, "455"));

      temp = atoi(strcarrier);

 

      char *endptr = NULL;  

      memset(strcarrier, 0, STRLEN);  

      strcpy(strcarrier, str);

      temp = strtol(strcarrier, &endptr, 10);

      temp = strtol(strcarrier, &endptr, 16);

 

      memset(strcarrier, 0, STRLEN);  

      strcpy(strcarrier, "11122str11");  

      strtol(strcarrier, &endptr, 16);

 

      strcpy(strcarrier, "");  

      sprintf(strcarrier, "%d", temp);

      return 0;

}

 

 

        

                     

                     

C字符串处理函数

标签:错误   iss   format   空白   char s   覆盖   长整型   输出   main   

原文地址:http://www.cnblogs.com/jinpao/p/6691463.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!