C++中"\0"和'\0'的区别

sleeplacker 2013-10-15 07:52:02
今天发现了一件奇怪的事,"\0"表示什么都没有,而'\0'却表示一个空格,也许是输出格式的问题吧
看看这个程序:

#include <iostream>
#include <string>

int main()
{
using std::cout;
using std::endl;
using std::string;

string s;
cout << "i" << s[0] << "i" << "i" << endl;
cout << "i" << s << "i" << "i" << endl;
return 0;
}

两种输出的结果居然不一样,请问这是怎么回事
...全文
699 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-10-15
  • 打赏
  • 举报
回复
因为串的“\0”只是结束符号,所以“\0”这个串,不过是两个结束符的串而已。 字符串显示,到结束符为止。不再输出其他字符。 字符串可以链接在一起中间用'\0'分割,但是第一个'\0'后面的字符,输出串的时候都不能够输出。 字符'\0'就是ASCII为 0的字符。是个控制字符,显示为空格。 许多不显示的ASCII字符,都会显示为空格,这些多半都是控制字符。 ASCII只有128个字符,最大为127是个控制字符 del 可能会显示,也可能不会显示。 128 以上的图形字符,不是标准的ASCII码,有时称为扩充(扩展)ASCII码。
pathletboy 2013-10-15
  • 打赏
  • 举报
回复
你这个问题可以简化为2行
        cout << "i"  << '\0' << "i" << endl;
        cout << "i"  << "" << "i" << endl;
cout << 字符 cout << 字符串 这俩最终调用的是不同的函数,字符总是会输出,\0输出为NULL,不可见字符,你看到的就是空格,而字符串则是碰到\0结束输出。
lm_whales 2013-10-15
  • 打赏
  • 举报
回复
引用 2 楼 lg1544650023 的回复:
我的怎么没非法
不同编译器的string 的实现不一样,有的空串用“” 有的用NULL指针
sleeplacker 2013-10-15
  • 打赏
  • 举报
回复
我的怎么没非法
  • 打赏
  • 举报
回复
s[0]访问非法呀

69,396

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧