Segmentation fault в языке Си, с использованием char*

Хочу сказать что я новичок в Си, и мне нужно написать функцию, которая выведет элементы поля, без повторяющихся букв(элементов), но я не совсем понимаю, почему у меня возникла ошибка Segmentation Fault. Буду очень благодарен за помощь.

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdbool.h>

char* d(char*);

int main(void) {
    char* str = "Google";
    d(str);
    return 0;
}

char* d(char* str) {
    int x = 0;
    int len = strlen(str);

    while (x != len) {
        if (str[x] == str[x+1]) {
            str[x] = 0;
            str[x+1] = 0;
        }
        x++;
    }

    str = '\0';
    return str;
}


Ответы (1 шт):

Автор решения: mik.ov

Все дело в том, что вы пытаетесь изменить область памяти, которая не предназначена для записи.

char *str = "Google"; /* ~= char const *const str = "Google"; */

Если вы хотите изменить массив символов, то так и запишите его в стек как массив символов:

char str[] = "Google";

Исправьте ваш код на такой:

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdbool.h>

char* d(char*);

int main(void) {
    char str[] = "Google";
    d(str);
    return 0;
}

char* d(char* str) {
    int x = 0;
    int len = strlen(str);

    while (x != len) {
        if (str[x] == str[x+1]) {
            str[x] = 0;
            str[x+1] = 0;
        }
        x++;
    }

    str = '\0';
    return str;
}
→ Ссылка