2012-04-18 26 views
0

請原諒我的C++天真。我需要比較解析.OBJ 3D對象文件中的兩個字符。在每一行迭代中,我所做的strcmp調用永遠不會返回true。我有一種感覺,這是因爲我沒有注意到我的字符和字符知識。有人看到我在這裏做錯了嗎?比較C++ char *字符進行解析.OBJ文件

//Variables 
char* type = new char[1]; 

float v1; 
float v2; 
float v3; 

//INSIDE the while loop that parses each line of the file 
getline(myfile, line); 
sscanf(line.c_str(),"%c %f %f %f", type, &v1, &v2, &v3); 
if(strcmp(type,"f") == 0){ 
    faces++; 
} 
if(strcmp(type,"v") == 0){ 
vertices++; 
} 
+0

爲什麼這個char * type = new char [1];'?爲什麼不簡單'字符類型;'? – Nawaz 2012-04-18 04:48:24

+0

爲什麼不能將strcmp轉換爲if(type [0] =='v')? – Raghuram 2012-04-18 04:48:42

+0

只是將其更改爲const char *類型;它的工作。對於那個很抱歉。 – 2012-04-18 04:50:49

回答

3

「的strcmp」比較空終止字符串,但,你定義了「類型」爲單個字符不被終止X'00' 通過的strcmp如預期的字符陣列。

一個簡單的if (type == 'f')字符比較應該會得到正確的結果。

+0

說得太快,它不工作。我崩潰了sscanf(line.c_str(),「%c%f%f%f」,type,&v1,&v2,&v3)。我將類型定義爲const char *類型,但得到了關於類型未初始化的警告。所以,我說const char * type =「a」,並且在sscanf調用中我得到了那些神祕的「未處理的異常」錯誤之一。 (VS 2010) – 2012-04-18 05:51:30

+0

它是告訴scanf你期待單個字符的「%c」。只需將類型定義爲「char」即可。 – 2012-04-18 07:09:25

+0

試過並改變了我的比較if(type =='f')。仍然出現內存訪問錯誤。在調試模式下,當黃色箭頭指向sscanf行時,類型的值爲0.當我跨過sscanf行時,會發生內存訪問崩潰。 – 2012-04-18 15:24:52