我担心你正在以一种非常不健康的方式混合 C 和 C++。
首先,我衷心推荐使用std::string
而不是 a 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 中已修复。