2014-06-25 102 views
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而不是字符串,我也不會得到第一個機會異常。

+3

在調試器中獲得第一次機會異常本身沒有任何問題。這就是說,'_s'函數[要求你傳遞緩衝區的大小](http://msdn.microsoft.com/en-us/library/w40768et.aspx),所以...'fscanf_s(OBJFile, 「%s」,lineHeader,sizeof(lineHeader)/ sizeof(char));' –

+0

_'If我用char而不是string__你究竟是什麼意思? [你可以在你的問題中詳細說明這個問題](http://stackoverflow.com/posts/24419463/edit)?你是否試圖將'fscanf_s()'應用於'std :: string'或簡單的單個'char'可變參數時失敗? –

回答

-1

我強烈建議使用釋放和從不使用fsanf及其變種。