문자열을 스캔하고 ASCII 코드가 5 (+5) 증가하는 매우 단순한 암호화를 만들려고합니다. 글자가 알파벳 끝에 다다르면 시작 부분으로 돌아갑니다 (숫자와 동일). 구두점 및 기타 기호는 암호화되지 않습니다. 암호화 기능이 작동하고있는 것 같지만 문자열을 주 기능으로 다시 전달하는 데 문제가 있습니다. 무엇이 잘못 되었습니까?간단한 문자열 암호화
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*function definitions */
char encrypt(char input_string[]);
int main(void)
{
char input_string[25];
char new_string[25];
char encrypted_string[25];
int i = 0;
// scan word
printf("Enter word: ");
scanf(" %[^\n]", input_string);
fflush(stdin);
//check input
printf("%s\n", input_string);
// call encrypt function
encrypted_string[25] = encrypt(input_string);
// print encrypted version
printf("encrypted: %s\n\n", encrypted_string);
return 0;
}
char encrypt(char input_string[])
{
char new_string;
static char str[25];
int i;
for(i = 0; i < 25; i++)
{
if (input_string[i] > 96 && input_string[i] < 118) // for a - u
{
new_string = (input_string[i] + 5);
}
else if (input_string[i] > 117 && input_string[i] < 123) // for v - z
{
new_string = (input_string[i] - 21);
}
else if (input_string[i] > 64 && input_string[i] < 86) // for A - U
{
new_string = (input_string[i] + 5);
}
else if (input_string[i] > 85 && input_string[i] < 91) // for V - Z
{
new_string = (input_string[i] - 21);
}
else if (input_string[i] > 47 && input_string[i] < 53) // for 0 - 4
{
new_string = (input_string[i] + 5);
}
else if (input_string[i] > 52 && input_string[i] < 58) // for 5 - 9
{
new_string = (input_string[i] - 5);
}
else
{
new_string = input_string[i];
}
str[i] = new_string;
}
printf("\n\n");
i=0;
//check asccii codes
while(str[i])
{
printf("%d ", str[i++]);
}
//print string
printf("\n\n%s\n\n", str);
//return string to main
return(str[25]);
}
암호화 (또는 일반적으로 암호화)를 시작하기 전에 몇 가지 C 자습서와 연습이 더 필요합니다. 암호화 문제는 잘못된 오류가 발생하는 경우가 거의 없으며 부적절하게 사용하는 경우 무작위 데이터 만 가져 오는 것입니다. –
C의 함수에서 실제로 "문자열을 반환"할 수는 없습니다. C는 매개 변수를 값으로 전달하고 값을 반환하며, C에는 문자열 값 형식이 없습니다. 함수가 문자열을 만들 필요가 있다면, (1) 호출자가 그것을 위해 공간을 할당하게하고, 그 주소와 길이를 함수 (snprintf() 참조)에서 (2) 함수에 동적으로 할당하고 필요할 때 호출자가이를 해제하도록 트러스트합니다. –