2012-04-18 2 views
0

내 C++ naivete를 용서하십시오. .OBJ 3D 개체 파일을 구문 분석 할 때 두 문자를 비교해야합니다. 각 줄 반복에서 strcmp 호출은 결코 진실을 반환하지 않습니다. 나는 이것이 내 char * vs char 지식에 있지 않기 때문에 이것이 느낌 인 것 같습니다. 아무도 내가 여기서 뭘 잘못하고있는 걸 보지?.OBJ 파일을 구문 분석하기위한 C++ char * 문자 비교

//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];'? 왜 단순히'char type;'이 아닌가? – Nawaz

+0

strcmp를 if (type [0] == 'v')로 변환 할 수없는 이유는 무엇입니까? – Raghuram

+0

const char * type으로 변경했습니다. 그리고 효과가있었습니다. 미안합니다. –

답변

3

"을 strcmp는"단일 문자가 아닌 STRCMP에 의해 예상대로 'X'00 종료 문자의 배열로 "유형"을 정의, 널 (null) 종료 문자열을 비교,하지만.

간단한 if (type == 'f') 문자 비교를하면 정확한 결과를 얻을 수 있습니다.

+0

너무 빨리 말하면 아직 작동하지 않습니다. sscanf (line.c_str(), "% c % f % f % f", 유형, & v1, & v2, & v3)가 작동하지 않습니다. 유형을 const char * 유형으로 정의했지만 유형이 초기화되지 않았다고 경고했습니다. 그래서, 나는 const char * type = "a"라고 말했고 나는 sscanf 호출에서 그 암호화되지 않은 "처리되지 않은 예외"오류 중 하나를 얻는다. (VS 2010) –

+0

"% c"는 하나의 문자를 기대하는 scanf를 말합니다. 그냥 "char"로 타입을 정의하면 괜찮을 것입니다. –

+0

그것을 시도하고 if (type == 'f')와의 비교를 변경했습니다. 메모리 액세스 오류가 계속 발생합니다. 디버그 모드에서 노란색 화살표가 sscanf 행을 가리키면 입력 할 값은 0입니다. sscanf 행을 건너 뛸 때 메모리 액세스 충돌이 발생합니다. –

관련 문제