-1

重複の可能性:
バス エラーのトラブルシューティング

文字列から重複を削除するには、これが私が書いたプログラムです:

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

しかし、プログラムの実行時に表示されるエラーは次のとおりです: Bus error: 10

コードにどのような変更を加える必要がありますか? 前もって感謝します

4

2 に答える 2

3

"kjijhgfedcaba"は文字列リテラルであり、C で文字列リテラルを変更することはできません。

ところで、すべてのarr要素をに初期化したい場合0は、これ (GNU 拡張) の代わりに:

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

これを簡単に行うことができます:

int arr[256]= {0};
于 2012-10-27T12:32:58.347 に答える
1

len-i移動するメモリのサイズを試してください。あなたは間違いなくあなたのものではない記憶を移動します。(とは言っても、私は実際にはコードを読んでいません)。

于 2012-10-27T12:32:42.197 に答える