C分段错误xor char数组

时间:2017-07-01 08:30:44

标签: c arrays char segmentation-fault xor

我想在char数组中对我的所有字符中的某个值进行xor。我有一些代码,除了xor行以外都可以正常工作:

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

void obfuscate(FILE *file, char *input, char *variableName)
{
    int i;
    int size = (int)strlen(input);
    char a = 65;
    fprintf(file, "%s: %s -> ", variableName, input);

    for(i = 0; i < size; i++)
    {
        input[i] = (char)(input[i] ^ a);//I am causing a segmentation fault
        fprintf(file, "0x%x, ", input[i]);
    }
    return;
}

int main()
{
    char *a = "MyString";
    FILE *file = fopen("out.txt", "w");
    obfuscate(file, a, "a");
    fclose(file);
}

我在linux机器上使用普通的gcc编译器和gcc in.c -o out.o

如果我用xor操作注释该行,它就可以了。任何帮助都受到高度赞赏,我自己的研究没有得到解决方案。

1 个答案:

答案 0 :(得分:2)

尝试下面的动态记忆解决方案 在char *a = "MyString"; char *in = malloc(sizeof(a));a指向我们无法改变它的代码部分。 &安培; in指向堆部分,因此我们可以在任何时间修改它。

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

void obfuscate(FILE *file, char *input, char *variableName)
{
    int i;
    int size = (int)strlen(input);
    char a = 65;
    fprintf(file, "%s: %s -> ", variableName, input);

    for(i = 0; i < size; i++)
    {
        input[i] = (char)(input[i] ^ a);//I am causing a segmentation fault
        fprintf(file, "0x%x, ", input[i]);
    }
    return;
}

int main()
{
    char *a = "MyString";
    char *in = malloc(sizeof(a));
    strcpy(in, a);
    FILE *file = fopen("out.txt", "w");
    obfuscate(file, in, "a");
    fclose(file);
    free(in);
}