我可以问一下为什么这段代码会导致分段错误。我正试图从文本文件中获取输入,但我无法弄清楚问题是什么。
using namespace std;
using namespace cv;
int main()
{
char str[50];
FILE *trainfile;
int k, n, maxval1, maxval2, classnum;
char dataArray[n][3];
trainfile = fopen("training.txt", "r+");
if(trainfile == NULL){
perror("Cannot open file.\n");
}else{
while(!feof(trainfile)){
fscanf(trainfile, "%s", str);
}
}
fclose(trainfile);
return 0;
}
答案 0 :(得分:3)
int k, n, maxval1, maxval2, classnum;
char dataArray[n][3];
n
未初始化,因此它可以是任何值,因此您的代码具有未定义行为。
错误......反正它没用过。
代码中的另一个问题是数据缓冲区:
char str[50];
应该足够大以容纳文件的内容,这可能不是,并导致未定义的行为。
答案 1 :(得分:0)
一个问题是你的缓冲区可能不够大。
您应首先获取文件的大小,然后创建该大小的动态缓冲区,最后读取该文件。
fseek(trainfile,0,SEEK_END); //Go to end
int size = ftell(trainfile); //Tell offset of end from beginning
char* buffer = malloc(size); //Make a buffer of the right size
fseek(ftrainfile,0,SEEK_SET); //Rewind the file
//Read file here with buffer