简单加密代码的C分段错误

时间:2016-02-03 15:02:11

标签: c encryption segmentation-fault

我正在为类制作一个加密代码,它不断地将字符串分成两半,直到只剩下1或2个字符,在其中你用右边的分裂字符交换。但是,当我运行代码时,我不断收到此错误:

INPUT A PHRASE: 1234
LENGTH: 4
Segmentation fault (core dumped)

以下是我的源代码,如果有人可以帮我解决这个问题,我们将不胜感激。

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

void encrypt(char *str, int size);

int main(){
    char input[8192];
    int length;

    printf("INPUT A PHRASE: ");
    fgets(input, 8192, stdin);
    length = strlen(input) -1;
    printf("LENGTH: %d\n", length);

    encrypt(input, length);
    printf("ENCRYPTION: %s\n", input);  
    return 0;
}

void encrypt(char str[], int size){

    char *final;

    int i;
    int k = size / 2;

    char *left = strncpy(left, str, k);
    encrypt(left, k);

    char *right = strncpy(right, str + k, size - k);
    encrypt(right, size - k);

    if(size <= 2 && size > 0){
        final = strcat(final, right);
        final = strcat(final, left);
        return;
    }
}

1 个答案:

答案 0 :(得分:4)

strncpy将缓冲区作为第一个参数,将数据复制到的位置。在你的情况下,你传递给它一个未初始化的指针:

char *left = strncpy(left, str, k);

正确的是:

char left[SOME_SIZE];
strncpy(left, str, size); //size should not be greater than SOME_SIZE

right变量相同。参考:strncpy