今天编写一个字符窜处理函数,因为不想让字符窜在子函数中被修改,因此传参数时,将参数设置成了常量指针,代码如下:
1 /*
2 *作者:杜琪
3 *功能:在一个字符窜中进行搜索,查找所有在一个给定字符集合中出现的字符
4 *时间:2012.3.21
5 *心得:1、const的用法,编译时有警告?
6 *答:常量指针只能赋值给常量指针
7 * */
8 #include <stdio.h>
9 #include <stdlib.h>
10 char *find_char(char const *source,char const *chars)
11 {
12 if (source == NULL || chars == NULL)
13 return NULL;
14 char *p = NULL;
15 char *q = source;
16 for ( ; *q != '\0'; q++)
17 {
18 p = chars;
19 for ( ; *p != '\0'; p++)
20 {
21 if (*p == *q)
22 return q;
23 }
24 }
25 return NULL;
26 }
27 int main()
28 {
29 char *source = "ABCDEF";
30 // char *chars = "XRCQEF";//返回C
31 char *chars = "XYZ";//查找失败
32 char *d = find_char(source,chars);
33 if (!d)
34 printf("查找失败\n");
35 else
36 printf("%c\n",*d);
37 return 0;
38 }
~
编译虽然可以通过,但是会出现如下警告:
find.c:15:13: 警告: initialization discards ‘const’ qualifier from pointer target type [默认启用]
find.c:18:5: 警告: assignment discards ‘const’ qualifier from pointer target type [默认启用]
经查寻后发现,是因为
char *q = source;
因为source是常量指针,因此q也必须设置成常量指针,同样,对于子函数的返回值以及主函数的d都是如此,所以,修正后代码如下:
1 /*
2 *作者:杜琪
3 *功能:在一个字符窜中进行搜索,查找所有在一个给定字符集合中出现的字符
4 *时间:2012.3.21
5 *心得:1、const的用法,编译时有警告?
6 *答:常量指针只能赋值给常量指针
7 * */
8 #include <stdio.h>
9 #include <stdlib.h>
10 char const *find_char(char const *source,char const *chars)
11 {
12 if (source == NULL || chars == NULL)
13 return NULL;
14 char const *p = NULL;
15 char const *q = source;
16 for ( ; *q != '\0'; q++)
17 {
18 p = chars;
19 for ( ; *p != '\0'; p++)
20 {
21 if (*p == *q)
22 return q;
23 }
24 }
25 return NULL;
26 }
27 int main()
28 {
29 char *source = "ABCDEF";
30 // char *chars = "XRCQEF";//返回C
31 char *chars = "XYZ";//查找失败
32 char const *d = find_char(source,chars);
33 if (!d)
34 printf("查找失败\n");
35 else
36 printf("%c\n",*d);
37 return 0;
38 }
评论:我觉得这还不能令我满意,是不是有什么地方没有弄好,希望有知道的大婶指导指导