Боюсь, вы смешиваете C и C ++ очень нездоровым образом.
Во-первых, я искренне рекомендую использовать std::string
вместо char*
, поверьте, у вас будет гораздо меньше проблем.
Во-вторых, вам следует остерегаться указателей: они могут указывать, если вы не будете осторожны, на места в памяти, которые больше не содержат никаких «живых» объектов.
Я бы предложил следующий код:
void execute(std::ostream& out) {
out << "test\n";
} // execute
int main(int argc, char* argv[]) {
if (argc == 1) {
execute(std::cout);
return 0;
}
std::string filename = argv[1];
filename += ".log";
std::ofstream file(filename.c_str());
execute(file);
return 0;
}
Что показывает, как избежать двух ловушек, в которые вы попали:
- используя
std::string
Я избегаю выделять буфер статического размера, и поэтому я рискую переполнить буфер. Кроме того, операции намного проще.
- используя функцию для подъема логики печати, я покончу с указателем и появившимися в нем тонкими проблемами.
К сожалению, std::string
и std::fstream
(и супруги) в настоящее время смешиваются не так хорошо. Исторический дефект ... исправлен в C ++ 0x, если я правильно помню.