2013-05-18 2 views
0

메뉴 구조를 저장하기 위해 '메뉴'구조체를 사용하고 있습니다. 각 메뉴에 대한 모든 메뉴 데이터를로드하기 위해 루프에 사용할 파일에서 제대로 읽을 수 있습니다. 변수는 각 메뉴의 옵션을 저장하는 데 사용되는 char *의 벡터입니다. opengl을 사용하여 만든 메뉴 버튼에 메뉴 옵션을 표시하기 위해 freetype 라이브러리와 함께 사용됩니다.파일 읽기 및 출력 버그

char n = 0, 
tempBuffer[32]; 
FILE * menu = fopen ("MenuDatum.txt","r"); 
fgets (tempBuffer , 32 , menu); 
Menue[n].variable.push_back(tempBuffer);//"text here"); << 
fclose (menu); 

문자열 리터럴 작동합니다 '< <'는 댓글을 달았지만 tempbuffer의 크기에 따라 버퍼 출력 이상한 문자 (필요할 때) 사용할 때 여기서이 크기 32 내가 4C를 얻을, 또는 그것의 경우라면 16 나는 등을 얻는다. 하지만 만약 내가 그냥 출력 파일에 제대로 표시하는 법을 사용하여 출력 ... 그래서 내가 입력이나 출력에 문제가 없어하지만 내가 할 수 있습니까? 또한 'char * tempBuffer = "텍스트는 여기에"; " 내 구조체를 통해 라이브러리와 함께 텍스트 ""를 올바르게 표시합니다. 문자열 리터럴처럼.

파일의 텍스트는 단순히 '여기에 텍스트'여기

뿐만 아니라 메뉴 구조체이다; 너무 광범위하기 때문에 코드를 모두 붙여 넣지는 않습니다.

struct Drawings::menues 
{ 
    std::vector<char*> variable; 
    bool orrient; 
    float xPos, xPosF, yPos, yPosF, CR, CB, CG, CA, sliceWidth, sliceSpacing; 
    unsigned char options; 
} Menue[3]; 
+0

파일 내용이 비 ASCII (즉, A-Z 문자가 아님)일까요? –

+0

파일은 ASCII – user1964975

답변

0

코드를 보지 않고도 말하기 어렵습니다. My Crystal Ball (R)은 귀하가 이 "문자열"을 저장하는 벡터입니다. 포인터는 포인터 일 뿐이므로 로컬 버퍼를 사용하기 때문에 데이터를 제대로 저장할 수 없으며 나중에 손상됩니다.

std::ifstream in("MenuDatum.txt"); 
std::string line; 
if(!getline(in, line)) 
    throw std::runtime_error("failed to read MenuDatum.txt"); 

std::vector<std::string> variable; 
variable.push_back(line); 
+0

입니다 사과드립니다. 문자열이 아니고 char *입니다.이 정보를 포함하도록 원래 게시물을 편집합니다. – user1964975

+0

그런 다음 문제가 있습니다. 당신은 로컬 버퍼에 대한 포인터를 저장하고 있으며 함수가 반환하면 "매달린 포인터"가 생깁니다. 당신이 정당한 이유가 없다면 C++에서 텍스트에'char *'를 사용하지 마십시오. –

+0

도움 주셔서 감사합니다. – user1964975