C语言-Access violation

代码如下:
int main()
{
int count=0;
char str="abcd123sdf123sdf";
char *sub_str="123";
//int len_str=strlen(str);
//char *result_str=(char *)malloc(sizeof(char)
(len_str+1));
char result_str[100]="";
count=delete_sub_str(str,sub_str,result_str);
printf("%d\n",count);
getchar();
return 0;
}
程序运行到count=delete_sub_str(str,sub_str,result_str);提示Access violation,不知什么原因,求大神帮忙分析,感谢!

你这两个变量:
char str="abcd123sdf123sdf";
char *sub_str="123";
都定义为指向常量字符串,所以不能修改指针 str 和 sub_str 所指向的字符串的内容。不能修改,因为常量!
你在 delete_sub_str 函数中是否做了此类操作呢?

可以考虑将 str 和 sub_str 定义为数组试试。

 int main()
{
    int count = 0;
    char *str = "abcd123sdf123sdf";
    char *sub_str = "123"; 
    char result_str[100] = {'\0'};
    count = delete_sub_str( str, sub_str, result_str );
    printf("%d\n", count);
    getchar();
    return 0;
}

贴上delete_sub_str 的代码。谢谢。

全部代码:
#include
#include
#include
#include

int delete_sub_str(const char str,const char *sub_str,char *result_str)
{
assert(str!=NULL && sub_str!=NULL);
int count=0;
int i=0;
int len_sub=strlen(sub_str);
const char *p=str;
char *temp=(char *)malloc(sizeof(char)
(len_sub+1));

while (p!='\0')
{
    strncpy(temp,str,len_sub);
    *(temp+len_sub+1)='\0';
    if(*temp==*sub_str)
    {
        count++;
        p=p+len_sub;
    }
    else
    {
        *(result_str+i)=*p;
        i++;
    }
}
*(result_str+i)='\0';
printf("%s\n",*result_str);
return count;

}

int main()
{
int count=0;
char str="abcd123sdf123sdf";
char *sub_str="123";
//int len_str=strlen(str);
//char *result_str=(char *)malloc(sizeof(char)
(len_str+1));
char result_str[100]="";
count=delete_sub_str(str,sub_str,result_str); //出现access violation提示
printf("%d\n",count);
getchar();
return 0;
}

暂时不考虑功能实现,先解决访问冲突的问题。多谢@91program和@songtzu的热心回答。