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,不知什么原因,求大神帮忙分析,感谢!

c

3个回答

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

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

huangxc1990
huangxc1990 多谢您的提醒,确实是delete函数里面出问题,在函数里面加断点找出原因了。菜鸟伤不起。多谢!
5 年多之前 回复
91program
91program 回复huangxc1990: 你确定在 delete_sub_str 函数实现被调用之前就出错了?因为 delete_sub_str 之前只是定义,出错的可能性不大。
5 年多之前 回复
huangxc1990
huangxc1990 回复91program:源代码是有定义为指针的。
5 年多之前 回复
91program
91program 回复huangxc1990: char str 是不是少了个 *
5 年多之前 回复
huangxc1990
huangxc1990 在函数delete_sub_str中没有修改常量字串;现在是还没进入函数就提示访问冲突了。
5 年多之前 回复
 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 的代码。谢谢。

songtzu
songtzu int delete_sub_str(const char str,const char *sub_str,char *result_str) 你传入的参数是char * ,这个错误应该编译不过才对。
5 年多之前 回复
songtzu
songtzu 回复huangxc1990: 请区别char 和char *
5 年多之前 回复
huangxc1990
huangxc1990 已经贴出,多谢帮忙分析。
5 年多之前 回复

全部代码:
#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的热心回答。

91program
91program 你将 delete_sub_str 的实现注释掉,也会出现访问冲突吗?
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐