Невозможно распечатать поток ключей при использовании fgets для получения ключа от пользователя по сравнению с жестким кодированием - PullRequest
0 голосов
/ 01 марта 2020

Я экспериментирую с fgets вместо жесткого кодирования массива с программой, которая принимает открытый текст и ввод ключа и возвращает поток ключей и зашифрованный текст. Использование fgets для сканирования ключа от пользователя каким-то образом изменяет вывод, чтобы не печатать поток ключей, а только сам ключ. Единственное, что я изменил, это вместо того, чтобы жестко кодировать строку ключа с помощью массива, у меня есть пользователь, который вводит ключ с помощью fgets.

Жестко закодировано (фрагмент):

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

int main(void)
{
   char msg[] = "THECRAZYPROGRAMMER";
   char key[] = "HELLO";
   int msgLen = strlen(msg), keyLen = strlen(key), i, j;
   char newKey[msgLen], encryptedMsg[msgLen], decryptedMsg[msgLen];

   //generating new key
   for(i = 0, j = 0; i < msgLen; ++i, ++j){
      if(j == keyLen)
         j = 0;

    newKey[i] = key[j];
   }

   newKey[i] = '\0';
   printf("Original Message: %s", msg);
   printf("\nKey: %s", key);
   printf("\nNew Generated Key: %s", newKey);
}

fgets ( фрагмент):

#include <stdio.h>
#include <string.h>
int main(void)
{
   char msg[512];
   char key[512];
   int msgLen = strlen(msg), keyLen = strlen(key), i, j;
   char newKey[msgLen], encryptedMsg[msgLen], decryptedMsg[msgLen];

   fgets(msg, 512, stdin);
   fgets(key, 512, stdin);

   //generating new key
   for(i = 0, j = 0; i < msgLen; ++i, ++j){
      if(j == keyLen)
         j = 0;

    newKey[i] = key[j];
   }

   newKey[i] = '\0';
   printf("Original Message: %s", msg);
   printf("\nKey: %s", key);
   printf("\nNew Generated Key: %s", newKey);
}

1 Ответ

0 голосов
/ 01 марта 2020

Проверьте код ниже, который вносит несколько изменений в ваш код fgets.

#include <stdio.h>
#include <string.h>
int main(void)
{
   char msg[512];
   char key[512];

   fgets(msg, 512, stdin);
   fgets(key, 512, stdin);

  int msgLen = strlen(msg), keyLen = strlen(key), i, j;
   char newKey[msgLen], encryptedMsg[msgLen], decryptedMsg[msgLen];

   //generating new key
   for(i = 0, j = 0; i < msgLen; ++i, ++j){
      if(j == keyLen - 1)
         j = 0;

    newKey[i] = key[j];
   }

   newKey[i] = '\0';
   printf("Original Message: %s", msg);
   printf("\nKey: %s", key);
   printf("\nNew Generated Key: %s", newKey);
}

Я изменил две вещи. Во-первых, я переместил код, куда вы получаете msgLen и keyLen после вызова fgets, чтобы вы не брали strlen неинициализированной памяти. Во-вторых, я исправил ошибку «один за другим» в строке if (j == keylen - 1), чтобы символ новой строки, заданный fgets, не был включен в ваш вывод.

...