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

<C> 操作字符串的函数

时间:2018-04-07 15:00:52      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:\n   strlen   空间   符号   int   一个   bsp   16px   区分   

一.strlen

1.头文件:#include<string.h>

2.返回值:(无符号int)字符串长度

3.作用:计算字符串的长度

4.与sizeof的区分:sizeof是求大小的 这里用一道例题来说明

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main()
 5 {
 6     char str1[] = "abcde";
 7     int a = strlen(str1); //5
 8     int b = sizeof(str1); //6
 9 
10     char* str2 = "abcde";
11     int c = strlen(str2); //5
12     int d = sizeof(str2); //4 在32位操作系统中 指针的大小固定就是4
13 
14     return 0;
15 }

5.长度函数输出实现练习

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 size_t MyStrlen(char* str);
 5 
 6 int main()
 7 {
 8     char str[] = "abcd";
 9     int a = MyStrlen(str);
10 
11     printf("%d\n",a);
12     return 0;
13 }
14 
15 size_t MyStrlen(char* str)
16 {
17     size_t count = 0;
18     if(*str == NULL)
19     {
20         return -1;
21     }
22 
23     while(*str != \0)
24     {
25         count ++;
26         *str ++;
27     }
28 
29     return count;
30 }

注:size_t是无符号int类型

二.strcpy(有点不安全)

1.头文件:#include<string.h>

2.返回值:目标字符串的首地址

3.使用方法:strcpy(目标,源);

例:

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main()
 5 {
 6     char* str = "abcd";
 7     char str1[5];
 8     char* p = strcpy(str1,str);
 9 
10     printf("%s\n",p);
11     return 0;
12 }

需要注意的是:在定义目标字符串的时候 所给的空间应该是足够大的 不够大的话会崩 目标一定要大于等于源!!!

4.作用:将第二个参数(源字符串中的内容)拷贝到第一个(目标数组)中 并且返回目标字符串的首元素地址

5.拷贝函数实现练习

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 char* MyStrcpy(char* str1,const char* str2);
 5 
 6 int main()
 7 {
 8     char str1[5]; //不写方括号它就是个变量啊!
 9     char* str2 = "abcd";
10 
11     char* p = MyStrcpy(str1,str2);
12 
13     printf("%s\n",p);
14     return 0;
15 }
16 
17 char* MyStrcpy(char* str1,const char* str2)
18 {
19     char* p = str1;
20     
21     if(str1 == NULL || str2 == NULL) //也得判断str1是不是空的啊 因为它也应该是有空间的!
22     {
23         return NULL;
24     }
25     else if(strlen(str1)+1 < strlen(str2)+1)
26     {
27         return NULL;
28     }
29 
30     while(*str2 != \0)
31     {
32         *str1 ++ = *str2 ++;
33     }
34 
35     *str1 = \0;
36     return p;
37 }

三.strcpy_s

1.使用方法:strcpy_s(目标,目标空间大小,源);

 1 #include<stdio.h>
 2 #include<string.h>
 3  
 4 int main()
 5 {
 6     char* str = "abcd";
 7     char str1[5];
 8 
 9     strcpy_s(str1,5,str);
10  
11     printf("%s\n",str1);
12 
13     return 0;
14 }

注:目标空间大小要和前面目标的大小保持一致

2.返回值:(int类型)0代表成功拷贝

四.strncpy

1.使用方法:strncpy(目标,源,拷贝个数);

2.返回值:char*

3.函数实现:

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 char* MyStrncpy(char* str1,const char* str2,int n);
 5 
 6 int main()
 7 {
 8     char str1[5];
 9     char* str2 = "abcd";
10     int n = 2;
11 
12     char* p = MyStrncpy(str1,str2,n);
13 
14     printf("%s\n",p);
15 }
16 
17 char* MyStrncpy(char* str1,const char* str2,int n)
18 {
19     char* p = str1;
20     int i;
21 
22     if(str1 == NULL || str2 ==NULL)
23     {
24         return NULL;
25     }
26     else if(strlen(str1)+1 < strlen(str2)+1)
27     {
28         return NULL;
29     }
30 
31     for(i=0;i<n;i++)
32     {
33         *str1 ++ = *str2 ++;
34     }
35 
36     *str1 = \0;
37     return p;
38 }

五.strcat

1.使用方法:strcat(目标,源);

2.作用:字符串拼接 把源拼接到目标的后面

3.返回值:char*

4.函数实现:

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 char* MyStrcat(char* str1,const char* str2);
 5 
 6 int main()
 7 {
 8     char str1[10] = "abc";
 9     char* str2 = "def";
10 
11     char* p = MyStrcat(str1,str2);
12     printf("%s\n",p);
13 
14     return 0;
15 }
16 
17 char* MyStrcat(char* str1,const char* str2)
18 {
19     char* p = str1;
20 
21     if(str1 == NULL || str2 == NULL)
22     {
23         return NULL;
24     }
25     
26     while(*str1 != \0)
27     {
28         *str1 ++;
29     }
30     while(*str2 != \0)
31     {
32         *str1++ = *str2++;
33     }
34     *str1 = \0;
35 
36     return p;
37 }

六.strcat_s

1.使用方法:strcat_s(目标,源,目标大小);

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main()
 5 {
 6     char str1[10] = "abc";
 7     char* str2 = "abcd";
 8 
 9     int p = strcat_s(str1,sizeof(str1),str2);
10     printf("%d\n",p);
11 
12     return 0;
13 }

注:剩下的空间应该大于源的空间

2.返回值:(int类型) 0代表拼接成功

 

<C> 操作字符串的函数

标签:\n   strlen   空间   符号   int   一个   bsp   16px   区分   

原文地址:https://www.cnblogs.com/Aaaaaalei0612/p/8732798.html

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