c - 从文件中读取换行符分隔的项目
问题描述
我的 .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(不要使用“{”或“}”,我可能没有将它们全部粘贴)。
多谢你们 !(对不起,我是法国人,英语不太好啊啊啊)。
解决方案
问题是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 个字节。
推荐阅读
- templates - 为什么在 Laravel 5 应用程序中使用 laravel-mail-preview 插件发送的电子邮件没有被接收者接收?
- android - 设置为墙纸意图对话框?
- android - 禁用系统动画会使 UI 测试失败 Espresso?
- php - 无法插入具有多对多关系的类别类型
- java - Android Java NDK JNI 将对象(包括多级对象数组)传递给 C++
- go - golang中的marshal和Unmarshall错误
- r - 将砖块中的每个栅格图层与数据帧 R 中的值相关联
- javascript - 使用 Cytoscape.js 绘制二叉搜索树
- odoo - 如何在 odoo 中的笔记本表单视图中显示树视图?
- r - if (type == "xls") { 中的错误:需要 TRUE/FALSE 的缺失值