今天编写一个字符窜处理函数,因为不想让字符窜在子函数中被修改,因此传参数时,将参数设置成了常量指针,代码如下:
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 }
评论:我觉得这还不能令我满意,是不是有什么地方没有弄好,希望有知道的大婶指导指导