使用memmove时出现总线错误

时间:2012-10-27 12:29:16

标签: c gcc runtime-error bus memmove

  

可能重复:
  Bus error troubleshooting

要从字符串中删除重复项,这是我编写的程序:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void remDup(char str[])
{
    int i=0,len;
int arr[256]={[0 ... 255] = 0};

while(str[i]!='\0')
{   
    len=strlen(str);
    if(arr[str[i]]==1)
    {
        memmove(str+i,str+i+1,len);
    }
    else
        arr[str[i]]=1;
    i++;
}

printf("String with Unique Characters:%s\n",str);

}

main()
{
remDup("kjijhgfedcaba");
}

但运行程序时显示的错误是: 总线错误:10

代码中需要进行哪些更改? 提前致谢

2 个答案:

答案 0 :(得分:3)

"kjijhgfedcaba"是一个字符串文字,你不能修改C中的字符串文字。

顺便说一下,如果你想将所有arr元素初始化为0,而不是这个(这是一个GNU扩展):

int arr[256]={[0 ... 255] = 0};

你可以这样做:

int arr[256]= {0};

答案 1 :(得分:1)

尝试len-i获取正在移动的内存大小。你肯定会移动不属于你的记忆。 (也就是说,我还没有真正阅读过代码)。