使用指针给函数传递数据,排序字符串出错
程序代码:
//这是一个排序字符串的代码 #include<stdio.h> #include<string.h> #include<stdlib.h> bool str_in(char **); //读入字符串 返回bool类型值 void str_sort(const char *[],int); //排序字符串 无返回值 void swap(void **p1,void **p2); //交换指针地址 冒泡排序 无返回值 void str_out(char *[],int); //输出排序后字符串 无返回值 const size_t BUFFER_LEN=256; const size_t NUM_P=50; int main(void) { char *ps[NUM_P]; int count=0; printf("输入字符串:"); for(count=0;count<NUM_P;count++) if(!str_in(&ps[count])) break; str_sort(ps,count); //问题1.“str_sort”: 不能将参数 1 从“char *[50]”转换为“const char *[]”转换丢失限定符 str_out(ps,count); return 0; } bool str_in(char **pstring) { char buffer[BUFFER_LEN]; if(gets(buffer)==NULL) { printf("\nError reading string.\n"); exit(1); } if(buffer[0]=='\0') return false; *pstring=(char*)malloc(strlen(buffer)+1); if(*pstring==NULL) { printf("\n分配失败!"); exit(1); } strcpy(*pstring,buffer); return true; } void str_sort(const char *p[],int n) { char *ptemp=NULL; bool sorted=false; while(!sorted) { sorted=true; for(int i=0;i<n-1;i++) if(strcmp(p[i],p[i+1])>0) { sorted=false; swap(&p[i],&p[i+1]); //问题2.“swap”: 不能将参数 1 从“const char **”转换为“void **“与指向的类型无关; // 转换要求 reinterpret_cast、C 样式转换或函数样式转换 } } } void swap(void **p1,void **p2) { void *pt=*p1; *p1=*p2; *p2=pt; } void str_out(char *p[],int n) { printf("字符串由小到大排序为:\n\n"); for(int i=0;i<n;i++) { printf("%s\n",p[i]); free(p[i]); p[i]=NULL; } return; }
这是霍顿的C语言入门经典书上的一个列子 关于指针函数传递的代码 因为我刚开始学习这章 所以真心不知道该怎么去改正 求高手指点
[ 本帖最后由 瓦尔德的田野 于 2012-12-23 22:13 编辑 ]