文字列をnullで終了しているわけではありません。これが少し変更されたバージョンです:(まだ問題がありますが)
#include <stdio.h>
#include <string.h>
int
encrpypt(char ciphertext_buffer[], char plaintext[], char key[]) {
int i;
for (i=0; i<strlen(plaintext); i++) {
ciphertext_buffer[i] = (char) ( ( ((int)plaintext[i] - 65 + (int)key[i%(strlen(key))] - 65) % 26 ) + 65 );
}
ciphertext_buffer[i] = 0;
return 0;
}
int
main() {
char ciphertext_buffer[11];
encrpypt(ciphertext_buffer, "THISISCOOL", "CRYPT");
printf("%s\n", ciphertext_buffer);
return 0;
}
より大きな問題は、境界チェックを行っていないことです。より良いバージョンは次のとおりです。
#include <stdio.h>
#include <string.h>
int
encrpypt(char ciphertext_buffer[], char plaintext[], char key[], int size) {
int i;
for (i=0; i<strlen(plaintext); i++) {
if (i > size - 1) break;
ciphertext_buffer[i] = (char) ( ( ((int)plaintext[i] - 65 + (int)key[i%(strlen(key))] - 65) % 26 ) + 65 );
}
ciphertext_buffer[i] = 0;
return 0;
}
int
main() {
char ciphertext_buffer[11];
encrpypt(ciphertext_buffer, "THISISCOOL", "CRYPT", sizeof(ciphertext_buffer));
printf("%s\n", ciphertext_buffer);
return 0;
}