0

我正在使用波纹管结构“菜单”来存储菜单数据;在我能够从文件中正确读取之后,我将使用 for 循环为每个菜单加载我的所有菜单数据。variable 是 char* 的向量,用于存储每个菜单中的任何选项。然后与 freetype 库一起使用,在使用 opengl 创建的菜单按钮上显示菜单选项。

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,我得到 lk,等等;但是如果我只是使用 cout 输出,它会正确显示文件中的内容......所以我的输入或输出都没有问题,但我有吗?另外,'char* tempBuffer = "text here";' 将通过我的结构在库中正确显示“此处的文本”;等等。就像字符串文字一样。

文件中的文本只是“此处的文本”

这里也是菜单结构;我没有粘贴所有代码,因为它太广泛了

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];
4

1 回答 1

0

没有看到代码,很难说。我的 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);
于 2013-05-18T18:00:46.693 回答