gpt4 book ai didi

c - 使用 fgets 将字符串从文件流读取到字符数组中。 [C]

转载 作者:行者123 更新时间:2023-11-30 14:52:11 24 4
gpt4 key购买 nike

我正在尝试制作一个程序来解密文件中的一系列字母。遗憾的是,我无法将字母读入字符数组(字符串),因为我真的不知道 fgets() 函数是如何工作的。所以我的实际代码如下所示:

#define stringlength 80

int main(void)
{
FILE *source;
char puffer[stringlength], name[20];

printf("Which file do you want to read: ");
scanf("%s",name);
if( (source=fopen(name,"r")) == NULL)
{
fprintf(stderr, "Can not open %s\n", name);
return EXIT_FAILURE;
}
while(fgets(puffer, stringlength, source))
{
fputs(puffer, stdout);
}
return EXIT_SUCCESS;
}

所以实际上这有点管用。它打开命令提示符并在该窗口中写入字母序列。但现在我必须使用每一个字母并将其与 key 的字母进行比较。它只是将正确的四位与 XOR 进行比较,以将结果字母保留在 ASCII 图表的同一列中。我已经编写了一个适用于单个字母的算法:

saveLeftFourBits = letterOfFile >> 4;
saveLeftFourBits = saveLeftFourBits << 4;
letterOfFile = letterOfFile & 0x0F;
letterOfKey = letterOfKey & 0x0F;
temp = letterOfFile ^ letterOfKey;
temp |= saveLeftFourBits;

temp 应该是结果字母。所以现在我正在努力解决如何将 fgets 函数中的单个字母读入变量(在 letterOfFile 中)并将其与 letterOfKey 进行比较。或者是否有一个字符串函数可以更简单地实现这一点?我希望有一个人可以帮助我。 :)

最佳答案

pufferfgets 存储最多 80 个字符的行的位置,包括(如果大小允许)尾随的 \n

要处理一行中的所有字符,请从 puffer 的开头执行循环,直到到达行尾,即 \0\n

char letterOfKey = '#';     // Define it
char *s;
for(s=puffer ; *s && *s != '\n' ; s++) {
*s = (*s & 0xF0) | ((*s ^ letterOfKey) & 0x0F);
}
fputs(puffer, stdout);

说明

s 指向 puffer 的开头并递增。当s指向的字符为0\n时,循环结束。对于行中的每个字符,*s,完成按位运算并将其存储回*s。并且,

  • (*s & 0xF0) 保留 4 MSb
  • | 是按位或
  • (*s ^ letterOfKey) 在 2 个操作数之间进行异或运算
  • & 0x0F 保留 4 个 LSb

另请参阅Bitwise operations in C

关于c - 使用 fgets 将字符串从文件流读取到字符数组中。 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47728327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com