随笔 - 51, 文章 - 1, 评论 - 41, 引用 - 0
数据加载中……

CPPEXP —— 字符串常量

说明

字符串常量会放入程序的静态区,并且是只读数据段。由于是只读数据,编译器会合并相同的字符串常量。

实验代码

  1. /**
  2. * @file constant_string.cpp
  3. * @brief 测试常量字符串
  4. * @copyright public domain
  5. */
  6. #include <iostream>
  7. int main() {
  8. char* a = "string";
  9. const char* b = "string";
  10. std::cout << "a == b is " << (a==b ? "true" : "false") << std::endl;
  11. a[1] = 'd'; // ERROR
  12. return 0;
  13. }

运行及结果

$ g++ constant_string.cpp 
constant_string.cpp: In function ‘int main()’:
constant_string.cpp:10:12: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
  char* a = "string";
            ^
$ ./a.out 
a == b is true
段错误 (核心已转储)
  • ab的地址相同。
  • 编译器会对char* a = "string"报警告。
  • 对字符串常量的修改会引发程序异常。




posted on 2016-04-19 20:51 lemene 阅读(265) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理