我正在为类制作一个加密代码,它不断地将字符串分成两半,直到只剩下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;
}
}
答案 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