首页 > 解决方案 > 从文件中读取换行符分隔的项目

问题描述

我的 .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(不要使用“{”或“}”,我可能没有将它们全部粘贴)。

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

标签: cgcchashfgetsunsigned-char

解决方案


问题是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 个字节。


推荐阅读