与硬编码输入相比,使用 fgets 从用户获取密钥时无法打印密钥流
Cannot print key-stream when using fgets to get key from user compared to hard coding inputs
我正在尝试使用 fgets 而不是使用采用纯文本和密钥输入以及 returns 密钥流和加密文本的程序对数组进行硬编码。使用 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] = '[=10=]';
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] = '[=11=]';
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];
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] = '[=10=]';
printf("Original Message: %s", msg);
printf("\nKey: %s", key);
printf("\nNew Generated Key: %s", newKey);
}
我改变了两件事。首先,我将获得 msgLen
和 keyLen
的代码移动到调用 fgets
之后,这样您就不会使用 strlen
未初始化的内存。其次,我更正了 if (j == keylen - 1)
行中的一个差一错误,以便 fgets
的换行符不包含在输出中。
我正在尝试使用 fgets 而不是使用采用纯文本和密钥输入以及 returns 密钥流和加密文本的程序对数组进行硬编码。使用 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] = '[=10=]';
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] = '[=11=]';
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];
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] = '[=10=]';
printf("Original Message: %s", msg);
printf("\nKey: %s", key);
printf("\nNew Generated Key: %s", newKey);
}
我改变了两件事。首先,我将获得 msgLen
和 keyLen
的代码移动到调用 fgets
之后,这样您就不会使用 strlen
未初始化的内存。其次,我更正了 if (j == keylen - 1)
行中的一个差一错误,以便 fgets
的换行符不包含在输出中。