C语言 用crypt加密单词列表



我正在做这件事:http://d2o9nyf4hwsci4.cloudfront.net/2014/spring/psets/2/hacker2/hacker2.html

,我正试图从/usr/share/dict/words中列出加密的8个字母单词,这是我到目前为止得到的。我正在使用盐HA和50。

#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int FindWord();
int main(int argc, char *argv[])
{
    if(argc > 2)  
    {
        printf("Invalid Argument");
        return 1;
    } 
    else 
    {
      FindWord();  
    }
int FindWord()
{
    FILE *fp1, *fp2;
    fp1 = fopen("/usr/share/dict/words", "r");
    fp2 = fopen("EncrpytedPassword.txt","a+");
    char *Line = fgets(char *line[9], int 9, fp1);
    while (fgets(char *line[9], int 9, fp1) != EOF)
    {
         char *EncryptLine1 = crypt(Line, const char *50); 
         fputs(EncryptLine1, fp2);
         char *EncryptLine2 = crypt(Line, const char *"HA");
         fputs(EncryptLine2, fp2);
    }
} 


**crack.c:26:24: error: expected expression
char *Line = fgets(char *line[9], int 9, fp1);
                   ^
crack.c:27:18: error: expected expression
    while (fgets(char *line[9], int 9, fp1) != EOF)
             ^
crack.c:29:43: error: expected expression
         char *EncryptLine1 = crypt(Line, const char *50); 
                                      ^
crack.c:31:43: error: expected expression
         char *EncryptLine2 = crypt(Line, const char *"HA");
                       **

你的代码有一些问题:

假:

char *Line = fgets(char *line[9], int 9, fp1);

正确:

char line[9];
fgets(line, 9, fp1);

为什么:

  char *Line = fgets(char *line[9], int 9, fp1);
    while (fgets(char *line[9], int 9, fp1) != EOF)

那不是吗?:

char line[9];
while (fgets(line, 9, fp1) != NULL)

另外,你的word文件有139719行长。你确定要这么做吗?

False:

char *EncryptLine1 = crypt(Line, const char *50);

:

char *EncryptLine1 = crypt(Line, "50"); 

用- crypt修正这个编译,并且good包含并且没有"预期表达式"

(在文件中的每个散列后面写"n"可能会很好)

注意,在函数的开头声明EncryptLine1和EncryptLine2会更清楚。

我绝对不确定到底是什么被要求,但假设有一些问题在给定的代码,并假设解决问题的路径点被要求:在代码中缺少开始和结束类型转换括号。

就你向我们披露的情况而言,line并不存在。您似乎试图使用fgets的方式确实是非常规的,但以下方法可以工作:

char *Line = fgets((char[9]) { 0 }, (int) 9, fp1);

而不是你写的。在那里,{ 0 }将被类型转换为9字符数组,动态分配内存,直到该作用域结束,然后将其作为参数发送给fgetsLine会收到动态分配的内存地址,因为fgets会返回它的第一个参数,除非发生错误。

我希望我能提供我所依赖的文档,用于我的声明,保证内存位置在该作用域结束之前可用。

我不知道你在尝试什么(const char *) 50,但它不会工作。如果您希望将带有ASCII码50的单个字符作为字符串传递,那么您可以在这里写(const char[]) { 50, 0 }。如果您想使用字符串"50",则应该使用(const char *) "50"

最新更新