0
我想创建一个C++程序,它将解析.obj文件并呈现OpenGL中.obj文件中定义的模型。到目前为止,所有这些代码应该做的是打开一个.obj文件并将每个顶点放入一个向量中(.obj文件中的顶点定义在以“v”开头的行中)。C++ OBJ解析器 - 第一次机会例外
我完整的代码:与线
fscanf_s(OBJFile, "%s", lineHeader);
如果我评论这一行了,我不会得到第一次机会出现异常
#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;
}
的问题。如果我使用char而不是字符串,我也不会得到第一个机会异常。
在调试器中获得第一次机会异常本身没有任何问题。这就是说,'_s'函数[要求你传递缓冲区的大小](http://msdn.microsoft.com/en-us/library/w40768et.aspx),所以...'fscanf_s(OBJFile, “%s”,lineHeader,sizeof(lineHeader)/ sizeof(char));' –
_'If我用char而不是string__你究竟是什么意思? [你可以在你的问题中详细说明这个问题](http://stackoverflow.com/posts/24419463/edit)?你是否试图将'fscanf_s()'应用于'std :: string'或简单的单个'char'可变参数时失败? –