定义字符串指针

下边哪儿错了?运行就提示内存不能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);
}
展开
 我来答
kkkwing
推荐于2017-09-04 · TA获得超过1221个赞
知道小有建树答主
回答量:267
采纳率:90%
帮助的人:258万
展开全部

有以下几处问题:

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);
}
乐创客
2020-12-18
知道答主
回答量:34
采纳率:0%
帮助的人:1.9万
展开全部

第五十六集 指针指向字符串

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式