私は以下のコードに問題があります。私は使用しているIDEによって異なる動作を経験しています。const char *をfile.open()に渡すと、異常な動作
のDev-C++:実行します罰金。ただし、GenerateFileName(0,0)
をfile.open()
に渡すと、ファイルは作成されません。
のVisual Studio 2013:すべてのケースで罰金実行しますが、しかし、ファイルの名前は
ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌPùD
またはそのような何かのようなルックスを生成し、ファイル自体は(私は.txt
を期待拡張子がありませんファイル)。
int main()
{
ofstream file;
file.open(GenerateFileName(3, 0));
file << 1 << endl;
file.close();
_getch();
}
const char* GenerateFileName(int Instance_nth, int Input_nth)
{
string filename = to_string(Instance_nth);
filename += "_";
filename += to_string(Input_nth);
filename += ".txt";
return filename.c_str();
}
をGenerateFileName 'で()'変数 'filename'は、関数が戻るときに破壊されます関数の戻り値はゴミです。 – Leon
ローカル変数へのポインタを返しています。それがUBです。 –
関数から文字列を返すだけです – Borgleader