定义字符串指针

下边哪儿错了?运行就提示内存不能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);
}

有以下几处问题:

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);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-12-18

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