将 NULL 字符输出到 std::cout 是否安全?

问题描述 投票:0回答:1

虽然这是一个很小的问题,但是每次当我需要循环打印一些数据时,如何排列分隔字符总是让我像一只无聊的苍蝇一样烦恼。

例如:

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 << '}';

我的问题是:将 NULL(' ') 字符输出到 std::cout 是否安全? 我主要在我的守护程序中使用此方法,因此通过这种方式,它们主要将一些日志文本打印到 std::cout/std::cerr 或 Linux 文件系统中的其他文本文件。

结果文件(日志文件),主要由一些cli工具读取,例如

more/less/tail/head

这样我会不会遇到崩溃的情况?

谢谢!请原谅我的英语。

c++ stdout iostream null-character non-printing-characters
1个回答
0
投票

将 NULL 字符输出到 std::cout 是否安全?

是的,假设安全是指格式良好,那么这是安全的。

这样我会不会遇到崩溃的情况?

不,格式良好的程序具有明确定义的行为。

© www.soinside.com 2019 - 2024. All rights reserved.