Я пытаюсь создать программу на C ++, которая будет анализировать файл .obj и отображать модель, определенную в файле .obj, в OpenGL. До сих пор весь этот код должен был открывать файл .obj и помещать каждую вершину в вектор (вершины в файлах .obj определены в строке, начинающейся с «v»).
Мой полный код:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
struct vec3{
float x;
float y;
float z;
};
void loadOBJ(const char * Path){
vector<vec3> Vertices;
FILE * OBJFile;
vec3 temp = vec3();
fopen_s(&OBJFile, Path, "r");
char lineHeader[128];
//set to true when there are no more lines in the OBJ file
bool ended = false;
while(!ended){
fscanf_s(OBJFile, "%s", lineHeader);
if(strcmp(lineHeader,"v") == 0){
fscanf_s(OBJFile, "%f %f %f\n", &temp.x, &temp.y, &temp.z);
printf("Point: %f %f %f\n", temp.x, temp.y, temp.z);
Vertices.push_back(temp);
}else if(lineHeader != NULL){
fscanf_s(OBJFile, "\n");
}
else{
ended = true;
}
}
}
int main(){
loadOBJ("example.obj");
cin.get();
return 0;
}
Проблема возникает с линией
fscanf_s(OBJFile, "%s", lineHeader);
Если я прокомментирую эту строку, я не получу исключение первого шанса. Если я использую символ вместо строки, я также не получу исключение первого шанса.
Я настоятельно рекомендую использовать freed и НИКОГДА не использовать fsanf и его варианты.