下面是我尝试删除字符串的重复项,我有两个问题:

void removeDuplicates(char *original_string)
{
    if(original_string == NULL) {
        return;
    }
    int len = strlen(original_string);
    if (len < 2) {
        return;
    }

    int tail = 1;
    int i;
    for (i = 1; i < len; i++) {
        int j;
        for (j=0; j < tail; j++) {
            if (original_string[i] == original_string[j]) {
                break;
            }
        }
        if (j == tail) {
            original_string[tail] = original_string[i];
            ++tail;
        }
    }
}

第一:我做错了什么我看不见?我在一本书中找到了这个例子,我相信这是有道理的。为什么不删除重复的字符?
第二:调用函数时,如果我使用:
char duplicated[] = "aba";
removeDuplicates(duplicated);

我没有错。但如果我这么做的话:
char *duplicated = "aba";
removeDuplicates(duplicated);

我在运行时得到一个Bus error: 10

最佳答案

char duplicated[] = "aba";

创建可写的chars数组。
char *duplicated = "aba";

创建一个字符串文本(不可修改),然后将变量duplicated分配给指向该字符串文本的指针。由于您的函数尝试就地修改字符串,因此在尝试写入字符串文本时调用未定义的行为,从而导致崩溃。

07-25 22:00