我想知道这里的错误是什么?我正在制作一个 caus 密码,它工作正常但是当我在最后打印加密消息时,它会重新打印未加密的消息。当我注释掉并将消息设置为一个句子时,它工作正常。但是当我使用 fgets 获取一个字符串时,它会创建另一个副本。提前致谢!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
char message[100];
printf("Please Enter a message to be Encrypted: ");
fgets(message, 100, stdin);
unsigned char caeser[] = "";
int j = 0;
if(argc >= 2)
{
int k = atoi(argv[1]);
for(int i = 0, n = strlen(message); i < n; i++)
{
printf("%i\n",n);
if(!isspace(message[i]))
{
if(islower(message[i]))
{
j = message[i] - 97;
caeser[i] = 97 + ((j + k) % 26);
}
if(isupper(message[i]))
{
j = message[i] - 65;
caeser[i] = 65 + ((j + k) % 26);
}
}
else
{
caeser[i] = ' ';
}
}
printf("%s\n", caeser);
}
}
最佳答案
fgets()
没有问题。这里真正的问题是您没有正确定义数组 caeser
。
如果您在定义时没有使用足够 初始值设定项进行初始化,则需要显式提供大小。编译时数组不会神奇地根据使用情况扩展。您必须通过明确提及或使用足够数量的初始化器元素对其进行初始化来预先确定大小。
在这里,类似的东西
unsigned char caeser[100] = {0};
会为您完成这项工作。
关于c - fgets() 在输入时创建另一个字符串副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30533387/