c语言中invalid conversion from 'char to const 'char*怎么改

void modify()
{
int i,j,k,f,s,c[20];
char h[30],a[30],b[50];
printf("请输入一个姓名\n");
scanf("%s",&h[30]);
for(i=0;i<=15;i++)
{
if(strcmp(h[30],person[i].name)==0)
{
printf("请选择类型\n");
printf("1.姓名\n");
printf("2.电话\n");
printf("3.邮件\n");
scanf("%d",&n);
if(n=1)
{
printf("请输入要修改的姓名\n");
for(k=0;k<=30;k++)
{
scanf("%c",&a[k]);
}
strcpy(person[i].name,a[k]);
printf(%5c",person[i].name);
}
if(n=2)
{
printf("请输入要修改的电话\n");
for(f=0;f<=20;f++)
scanf("%s",&c[f]);
strcpy(person[i].num,c[f]);
pritf("%5c",person[f].num);
}
if(n=3)
{
printf("请输入要修改的邮编\n");
for(s=0;s<=50;s++)
scanf("%c",&b[s]);
strcpy(person[i].email,b[s]);
printf("%5c",person[i].email);
}
}
}

1、const char*是指向常量的指针,而不是指针本身为常量,可以不被初始化.
该指针可以指向常量也可以指向变量,只是从该指针的角度而言,它所指向的是常量,
通过该指针不能修改它所指向的数据.

2、const char*是不能直接赋值到char*的,这样编译都不能通过,理由:假如可以的话,
那么通过char*就可以修改const char指向的内容了,这是不允许的.
所以char*要另外开辟新的空间
string str = "dasfas";
char* p = (char*)str.c_str();
还有就是把const指针,转换成非const指针,目的不是为了修改指针指向的值,而往往是为了传参的方便。不得已才使用的。或者用 strcpy的方法
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-08-07
首先是编译问题:
if(strcmp(h[30],person[i].name)==0)
这句使编译出错。strcmp的原型为int strcmp (const char*, const char*);
而h[30]为char类型。你这么使用自然有错。
其次是逻辑问题:
scanf("%s",&h[30]);
数组下标范围是0到n-1;所以你最多可以使用&h[0]到&h[29]。
类似的在for循环中也有类似的数组越界问题。

建议你最好看一下数组那块的介绍。本回答被提问者和网友采纳
第2个回答  2012-06-29
你这代码对 字符数组指针的使用有问题。

你定义了:char h[30],但是h[30]却是指从字符数组第一个开始的第31个字符,已经溢出了。
正确的使用这个数组指针的方法是 h 或者 &h[0],后面的也都错了。

如果你定义的是数组指针,那么应该是 char* h[30]。