我正在做这件事: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
字符数组,动态分配内存,直到该作用域结束,然后将其作为参数发送给fgets
。Line
会收到动态分配的内存地址,因为fgets
会返回它的第一个参数,除非发生错误。
我希望我能提供我所依赖的文档,用于我的声明,保证内存位置在该作用域结束之前可用。
我不知道你在尝试什么(const char *) 50
,但它不会工作。如果您希望将带有ASCII码50
的单个字符作为字符串传递,那么您可以在这里写(const char[]) { 50, 0 }
。如果您想使用字符串"50"
,则应该使用(const char *) "50"
。