0

メニューデータを保存するために、次の構造体 'Menu' を使用しています。ファイルから適切に読み取ることができたら、for ループを使用して、各メニューのすべてのメニュー データをロードします。variable は、各メニューのオプションを格納するために使用される 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 の場合は lk などを取得します。しかし、coutを使用して出力すると、ファイルの内容が適切に表示されます...したがって、入力にも出力にも問題はありませんが、問題はありますか? また、「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];
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 に答える