虽然这是一个很小的问题,但是每次当我需要循环打印一些数据时,如何排列分隔符总是让我像一只无聊的苍蝇一样烦恼。
例如:
std::set<int> my_data { 1, 2, 3 };
bool is_first { true };
std::cout << '{';
for( auto i : my_data ) {
if( is_first )
std::cout << i;
else
std::cout << ',' << i;
is_first = false;
}
std::cout << '}';
或者:
std::set<int> my_data { 1, 2, 3 };
size_t cnt { 0 };
cout << '{';
for( auto i : my_data )
if( ++cnt == my_data.size() )
std::cout << i;
else
std::cout << i << ',';
std::cout << '}';
你可以在我的代码中看到,为了在正确的位置插入分隔符,我在循环中使用了4~5行,而真正的工作只是
std::cout << i;
!!!
所以,我经常这样做:
std::set<int> my_data { 1, 2, 3 };
char sep { '\0' };
cout << '{';
for( auto i : my_data ) {
std::cout << sep << i;
sep = ',';
}
std::cout << '}';
我的问题是:向 std::cout 输出 NULL (' ') 字符是否安全? 我主要在我的守护程序中使用此方法,因此通过这种方式,它们主要将一些日志文本打印到 std::cout/std::cerr 或 Linux 文件系统中的其他文本文件。
结果文件(日志文件),主要由一些cli工具读取,例如
more/less/tail/head
。
这样我会遇到崩溃的情况吗? 换句话说:
NULL 字符会被 fs/terminal/stdout/... 默默忽略吗?
谢谢!请原谅我的英语。
将 NULL 字符输出到 std::cout 是否安全?
是的,假设安全是指格式良好,那么这是安全的。
这样我会不会遇到崩溃的情况?
不,格式良好的程序具有明确定义的行为。