"cout<<(char*)NULL"在这里做"close(1)"吗?
Does "cout<<(char*)NULL" doing "close(1)" here?
在下面的代码中,我在此行之后使用了cout<<(char*)NULL;
,我的程序不会将任何内容打印到输出屏幕。这是否意味着我在这里对cout
做了close(1)
?这里到底发生了什么?这是一个错误吗?请分享您的想法。
#include<iostream>
using namespace std;
void f(){
cout<<"nfunn";
}
main(){
cout<<(char*)NULL;
f(); //not getting printed !
cout<<"nhellon"; //not getting printed !
cout<<"hii how are you?"; //not getting printed, why??
}
我已经用 gcc 和 DevCpp 编译器尝试过这个,观察到相同的行为。
cout << (char *)NULL
会导致未定义的行为。任何事情都可能发生。(编译器假定您在生成汇编代码时不执行此操作(。
此处使用的 char *
参数必须指向以 null 结尾的字符串中的字符。
在这里,您将badbit
设置在流上,这会导致cout<<(char*)NULL;
后不打印任何内容
if (!__s)
__out.setstate(ios_base::badbit);
标准说:requires: shall not be a null pointer
。因此,您的程序肯定具有未定义的行为,应该对其进行修复。您可以使用 cout.clear()
清除坏位。
在您的情况下,cout<<(char*)NULL;
会导致未定义的行为。但海湾合作委员会可以安全地玩它。
希望这有帮助!
(char*)NULL
不会像"NULL"
那样将NULL
变成字符串,如果你是这样想的。 NULL
实际上是一个扩展到0
的宏。将其强制转换为 char*
将其转换为指向零的指针(空指针(。唯一的问题是打印出来。尝试打印空指针是未定义的行为。到目前为止,您无法理解程序显示的任何行为。你的程序没有崩溃的事实让我感到惊讶。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- ofstream::close() 是否在 Linux 上调用同步?
- 如果我在字符数组上使用 close() 会发生什么?
- 如何显式调用运算符<<
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- ZeroMQ 在 context.close() 中被阻止.如何在C++中安全地关闭套接字和上下文?
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- inData.open and inData.close in C++