我的.c程序出了问题。我会解释一下:
我创建了一个函数来读取这些文件上的行(1个字/逐行哈希)。 代码:
int main(int argc, char const *argv[]) {
FILE *f = fopen("listePasswords.txt","r");
FILE *S1 = fopen("system_1.phl", "r");
unsigned char passwords[10][32];
unsigned char system_1[10][32];
lireFichier(f, passwords);
lireFichier(S1, system_1);
现在功能:
void lireFichier(FILE *f, unsigned char (*resultats)[32]) {
int i = 0;
if(f){
while(fgets(resultats[i], sizeof(resultats[i]), f) != 0) {
printf("%s\n", resultats[i]);
i++;
fgetc(f);
}
}
}
除了第一个单词之外,程序不会读取每个密码的第一个字符,而且我没有system_1.phl的所有行。
你可以帮我一点吗? :d (不要帮助“{”或“}”,我可能没有全部粘贴)。谢谢你们! (对不起,我是法国人,英语不太好。)
答案 0 :(得分:2)
问题是循环中的fgetc(f)
。那是读下一行的第一个字符。
我假设您打算在行末读取换行符。但fgets()
在其结果中包含了该内容,因此您无需跳过它。相反,您应该将其从resultsat[i]
:
while (fgets(resultsat[i], sizeof resultat[i], f) != 0) {
int len = strlen(resultat[i]);
if (len > 0 && resultat[i][len-1] == '\n') {
resultat[i][len-1] = '\0';
}
printf("%s\n", resultat[i]);
i++;
}
您还需要将数组声明中的[32]
更改为至少[34]
。您的哈希长度为32个字符,但fgets()
将读取以下换行符,并且还需要添加空字节来终止字符串。所以你需要在数组中至少再增加2个字节。