Операция XOR для двух символов - PullRequest
1 голос
/ 21 августа 2011

Здесь я пытаюсь поменять два символа в строке, используя операцию XOR. Но компилятор GCC выдает мне segmentation fault.

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

int main()
{
    char *str = "welcome";

    str[0] = str[0] ^ str[1];  // Segmenation fault here
    str[1] = str[0] ^ str[1];
    str[0] = str[1] ^ str[0]; 

    printf("%s", str);
    return 0;
}

Ответы [ 3 ]

9 голосов
/ 21 августа 2011

Нельзя изменить литералы в C. str указывает на постоянную память.

Попробуйте вместо:

char str[] = "welcome";

Существует C FAQ по теме.

3 голосов
/ 21 августа 2011

str указывает на строковый литерал. Строковые литералы только для чтения. Попробуйте:

char str[] = "welcome";
0 голосов
/ 21 августа 2011

Ваш char* фактически указывает на константу. Т.е. вы пытаетесь изменить что-то, хранящееся в части данных вашей программы с постоянными данными.

 char* str = strdup("welcome");
...