全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

c++cerr简述与应用

发布时间:2023-11-22 00:06:43
发布人:xqq

一、cerr的定义及特点


#include 
int main()
{
    std::cerr << "This is an error message!" << std::endl;
    return 0;
}

c++中标准库提供了三种标准输出流(cout、cerr、clog),分别用于输出普通信息、错误信息和日志信息。cerr是C++里面标准错误流,它和cout是完全独立的,不受标准输出流的控制。

cerr最主要的作用就是输出错误信息,跟cout非常相似,只是输出通道和输出内容不同。cerr主要有以下特点:

不经过缓冲区,即时输出 不受标准输出流控制 不会被重定向,一般用于输出错误信息到控制台或者日志文件

二、cerr的使用方式

cerr的使用方式和cout非常相似,只是输出通道和输出内容有所不同。下面是一些cerr的使用实例:


#include 
#include 
int main()
{
    std::ofstream log("test.log");
    std::cerr << "This is an error message!" << std::endl;
    log << "This is a log message!" << std::endl;
    return 0;
}

使用cerr输出错误信息,并实时输出到控制台 使用ofstream将日志信息输出到test.log中

三、cerr的应用场景

cerr主要用于输出错误信息,常用于以下场景:

程序发生异常时,输出异常信息 程序调试时,输出变量值或调用栈信息 日志输出时,错误信息需要实时显示到控制台

下面是一个应用场景的例子:


#include 
#include 
#include 
void func()
{
    try
    {
        std::string s("test");
        std::cout << s[10] << std::endl;
    }
    catch(std::exception& e)
    {
        std::cerr << "Exception caught:" << std::endl;
        std::cerr << e.what() << std::endl;
    }
}
int main()
{
    func();
    return 0;
}

上述示例中func()函数里面使用了try-catch语句来捕获s[10]的越界异常,捕获到异常后使用cerr输出异常信息并实时显示在终端。

四、cerr输出到日志文件

cerr除了输出到控制台,还可以将错误信息实时输出到日志文件中。下面是一个实例:


#include 
#include 
int main()
{
    std::ofstream log("test.log");
    std::streambuf *coutbuf = std::cout.rdbuf();
    std::cout.rdbuf(log.rdbuf()); // 将cout的输出重定向到log文件
    std::cerr.rdbuf(log.rdbuf()); // 将cerr的输出重定向到log文件
    std::cout << "This is a normal message." << std::endl;
    std::cerr << "This is an error message." << std::endl;
    return 0;
}

通过重定向cout和cerr输出流,可以将所有输出实时写入日志文件中。在实际应用中,也可以通过增加日志级别来选择输出哪些信息。

五、cerr的使用技巧

在使用cerr的过程中,有一些小技巧可以提高输出信息的质量:

使用cerr输出错误信息前,先使用cout清空缓冲区,确保输出不会混杂 出现错误时,及时输出错误信息和调用堆栈,方便调试 通过日志级别控制输出信息的多少

六、总结

cerr是C++标准库提供的一种标准错误流,主要用于输出错误信息。相比于cout,cerr更适合用于实时输出错误信息。在使用cerr的过程中,需要注意输出内容的格式和输出方式,以提高输出信息的质量。

c++hook

相关文章

float32的详细阐述

float32的详细阐述

2023-11-22
SSH-Y工具的完整指南

SSH-Y工具的完整指南

2023-11-22
跳出if语句,该如何做?

跳出if语句,该如何做?

2023-11-22
没有yum命令的解决方案

没有yum命令的解决方案

2023-11-22

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取