定义字符串指针
下边哪儿错了?运行就提示内存不能write的错误。voidDeleatChar(char*str,charc){//assert(str!=NULL);intiDes=0...
下边哪儿错了?运行就提示内存不能write的错误。
void DeleatChar(char *str,char c)
{ //assert(str!=NULL);
int iDes=0,iSrc=0;
do{if(str[iSrc]!=c)
str[iDes++]=str[iSrc];
}while(str[iSrc++]!='\0');
}
void main()
{
char *str="hello word";
char c='e';
//删除前输出
for(;*str!='\0';str++)
printf("%c",*str);
printf("\n");
DeleatChar(str,c);
//删除后输出
for(;*str!='\0';str++)
printf("%c",*str);
} 展开
void DeleatChar(char *str,char c)
{ //assert(str!=NULL);
int iDes=0,iSrc=0;
do{if(str[iSrc]!=c)
str[iDes++]=str[iSrc];
}while(str[iSrc++]!='\0');
}
void main()
{
char *str="hello word";
char c='e';
//删除前输出
for(;*str!='\0';str++)
printf("%c",*str);
printf("\n");
DeleatChar(str,c);
//删除后输出
for(;*str!='\0';str++)
printf("%c",*str);
} 展开
展开全部
有以下几处问题:
1、char *str="hello world";的定义方式,str指针所指向的字符串数据默认为const类型,所以不能修改内容,就是提示内存不能write的原因。
改为
char *str;
char TempString[]="hello world";
str = TempString;
这样的定义方式,指向的字符串数据就不是const类型了。
2、第一次输出字符串后str指针已经进行了str++的自加操作,str指针指向了字符串末尾,所以必须让str指针重新指向字符串开头位置,所以DeleatChar函数调用之前必须添加str = TempString;语句。
下面是修改好的程序,请参考。
void DeleatChar(char *str,char c)
{
//assert(str!=NULL);
int iDes=0,iSrc=0;
do{if(str[iSrc]!=c)
str[iDes++]=str[iSrc];
}while(str[iSrc++]!='\0');
}
void main()
{
char *str;
char TempString[]="hello world";
char c='e';
str = TempString;
//删除前输出
for(;*str!='\0';str++)
printf("%c",*str);
printf("\n");
str = TempString;
DeleatChar(str,c);
//删除后输出
for(;*str!='\0';str++)
printf("%c",*str);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询