从文件中读取换行符分隔的项目

时间:2018-05-10 19:06:27

标签: c gcc hash fgets unsigned-char

我的.c程序出了问题。我会解释一下:

  • 我有2个文件(listePassword.txt和system_1.phl)
  • 第一个文件包含10个密码(如123456,12345678,admin等)
  • 第二个包含10个哈希值(例如f31041d6d9c2031086bfe561d8e4b63f或77b6508f00223102d793837b9dd60358)

我创建了一个函数来读取这些文件上的行(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 (不要帮助“{”或“}”,我可能没有全部粘贴)。

谢谢你们! (对不起,我是法国人,英语不太好。)

1 个答案:

答案 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个字节。