Чтение разделенных строкой строк из файла - PullRequest
0 голосов
/ 10 мая 2018

У меня проблема с моей программой .c. Я объясню это:

  • У меня есть 2 файла (listePassword.txt и system_1.phl)
  • Первый файл содержит 10 паролей (например, 123456, 12345678, администратор и т. Д.)
  • Второй содержит 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 голосов
/ 10 мая 2018

Проблема в 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 байта в массивах.

...