使用指针给函数传递数据,排序字符串出错
程序代码://这是一个排序字符串的代码
#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 编辑 ]







