我在代码中设置了2个2D数组,一个用于存储ID数组,另一个用于存储密码。我试图从文本文件中读取格式为:
ID1 PASSWORD1
ID2 PASSWORD2
ID3 PASSWORD3
ID4 PASSWORD4
ID5 PASSWORD5
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_RECORDS 100
#define MAX_INPUT 40
void readFile();
void inputInit();
void DBInit();
void init();
FILE *fp;
char **IDArray;
char **passwordArray;
char *IDInput;
char *passInput;
int main(){
init();
readFile();
return 0;
}
void readFile(){
fp = fopen("Database_Table.txt","r");
char line[MAX_INPUT];
if(fp == NULL){
perror("Error in opening file");
}
else{
int i;
while(!feof(fp)){
fgets(line,sizeof(line),fp);
sscanf(line,"%s\t%s",IDInput,passInput);
IDArray[i] = IDInput;
passwordArray[i] = passInput;
i++;
}
}
fclose(fp);
}
void init(){
DBInit();
inputInit();
}
void inputInit(){
IDInput = (char*)malloc(sizeof(char) * MAX_INPUT);
passInput = (char*)malloc(sizeof(char) * MAX_INPUT);
}
void DBInit(){
IDArray = (char**)malloc(sizeof(char*) * MAX_RECORDS);
passwordArray = (char**)malloc(sizeof(char*) * MAX_RECORDS);
int i,j;
for(i=0;i<MAX_RECORDS;i++){
IDArray[i] = (char*)malloc(sizeof(char) * MAX_INPUT);
passwordArray[i] = (char*)malloc(sizeof(char) * MAX_INPUT);
}
}
我的问题是,出于某种原因,当我尝试存储ID和密码时,我一直遇到分段错误。任何帮助解决这个问题都将非常感激。
答案 0 :(得分:1)
int我创建了一个未初始化的野生i。替换为int i = 0;
答案 1 :(得分:0)
使用feof时要小心。你永远不应该使用feof作为循环的退出指示符。你可以看看this link,它解释了问题。
答案 2 :(得分:0)
第一个问题在于
行IDArray[i] = IDInput;
passwordArray[i] = passInput;
在这些行中,您只需指定指针。这意味着您不要将内容复制到预分配的数组中。为此,您必须使用strcpy
或strncpy
,例如
strcpy(IDArray[i], IDInput);
strcpy(passwordArray[i], passInput);
您的第二个错误是在循环终止中。该数组具有MAX_RECORDS
个元素的空间,但您不会停留在MAX_RECORDS
。你读到文件结尾,这可能要晚得多。
最后,正如@Malcolm已经指出的那样,你错过了i
的初始化。