C 删除字符串中的重复项。我错过了什么?

C 删除字符串中的重复项。我错过了什么?,c,string,C,String,下面是我尝试删除字符串重复项的过程,我有两个问题: 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

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

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);
我在运行时收到一个
总线错误:10

“…”
创建一个常量内存块来保存字符串。
您不能修改它


因此,在常量字符串上调用时,修改原始字符串[tail]是未定义的行为。

“…”
会创建一个包含字符串的常量内存块。
char duplicated[] = "aba";
您不能修改它


因此,在常量字符串上调用时,修改原始字符串[tail]是未定义的行为

char duplicated[] = "aba";
创建
char
s的数组,该数组可写

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

创建
char
s的数组,该数组可写

char *duplicated = "aba";

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

字符串文字在C中是不可修改的。这是未定义的行为

因此,
duplicated
必须是本地数组:

或者一定是这样

char duplicated[] = "aba";
而不是

char *duplicated = "aba";

字符串文字在C中是不可修改的。它是未定义的行为

因此,
duplicated
必须是本地数组:

或者一定是这样

char duplicated[] = "aba";
而不是

char *duplicated = "aba";

没有任何东西被移除

原始字符串[tail]=原始字符串[i]


这不是删除任何内容,而是替换任何内容

原始字符串[tail]=原始字符串[i]



这并不是删除任何内容,而是替换原始字符串[tail]

本身并不是未定义的行为。否则,您将无法以任何(有用的)方式使用字符串文字:)谢谢您的提问。实际上,我的问题还包括为什么我的方法在删除重复字符时不起作用。我看不出发生了什么。
原始字符串[tail]
本身并不是未定义的行为。否则,您将无法以任何(有用的)方式使用字符串文字:)谢谢您的提问。实际上,我的问题还包括为什么我的方法在删除重复字符时不起作用。我看不出发生了什么。我的问题可能重复,不仅仅是关于错误,还有为什么函数不工作。我在你的问题中没有看到任何这样的提及。你说当我做第一个的时候,我没有得到错误和第二个的错误。你还没说过这个系统是否有效。你希望我们编译和验证功能吗?你看不到吗?第一:我做错了什么,我没有看到?我在一本书中发现了这个例子,我相信它是有道理的。为什么不删除重复的字符?如果你不想,我不希望你做任何事。我不明白为什么我的程序不起作用,我请求帮助。没有人回答我现在说的话,因为你的问题似乎从来没有暗示过这个函数本身。如果是这样的话,你必须用它来编辑你的问题。我的问题的可能重复之处不仅在于错误,还在于为什么函数不起作用。我在你的问题中没有看到任何这样的提及。你说当我做第一个的时候,我没有得到错误和第二个的错误。你还没说过这个系统是否有效。你希望我们编译和验证功能吗?你看不到吗?第一:我做错了什么,我没有看到?我在一本书中发现了这个例子,我相信它是有道理的。为什么不删除重复的字符?如果你不想,我不希望你做任何事。我不明白为什么我的程序不起作用,我请求帮助。没有人回答我现在说的话,因为你的问题似乎从来没有暗示过这个函数本身。如果是这样的话,你必须用它来编辑你的问题,但即使把它声明为char-duplicated[]=“aba”;我没有看到重复的字符被删除。函数中的错误在哪里?@HommerSmith现在这是另一个问题。你试过调试它吗?另外,您希望
原始_字符串[i]要做什么?它本身什么也不做。这是一个没有副作用的表达式语句,其值立即被丢弃——本质上是一个不可操作的语句。这是在我最初的问题中。。。我问了两个问题,第一个为什么不起作用,第二个,为什么我在声明字符串本身时会出现错误……但甚至将其声明为char duplicated[]=“aba”;我没有看到重复的字符被删除。函数中的错误在哪里?@HommerSmith现在这是另一个问题。你试过调试它吗?另外,您希望
原始_字符串[i]要做什么?它本身什么也不做。这是一个没有副作用的表达式语句,其值立即被丢弃——本质上是一个不可操作的语句。这是在我最初的问题中。。。我问了两个问题,第一个为什么不起作用,第二个,为什么我在声明字符串本身时会出错。。。