关键词搜索

源码搜索 ×
×

字符串不进行初始化,那就等着bug蹦出来吧! (也谈程序为啥经常出现“烫烫烫烫烫烫”)

发布2013-01-17浏览11968次

详情内容

        之前在程序中没有对字符串进行初始化,结果总是有bug, 调试后才发现了真正原因,现示意如下:

 

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. char str1[100] = "abc";
  6. cout << str1 << endl;
  7. char str2[100];
  8. int i;
  9. for(i = 0; i < 3; i++)
  10. {
  11. str2[i] = 'a' + i;
  12. }
  13. cout << str2 << endl;
  14. char str3[100];
  15. memset(str3, 0, 100 * sizeof(char));
  16. for(i = 0; i < 3; i++)
  17. {
  18. str3[i] = 'a' + i;
  19. }
  20. cout << str3 << endl;
  21. return 0;
  22. }


        结果为:

 

abc
abc烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫
烫烫烫烫烫烫烫烫烫烫蘟bc
abc
 

       现在,明白了. 那为什么这么多“烫”子呢? 一个汉字,两个字节,下面来做个实验,就知道为什么是烫了. 

       在.txt文件中输入一个"烫"字,关闭文件,用ultraEdit打开去看对应的十六进制,结果是CCCC, 而VC中对于没有初始化的字符串,每个字节就是CC. 也就是说,每个str[i]都是对应11001100.

 

       最后看一个小程序:

 

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. char str[10];
  6. cout << str << endl;
  7. return 0;
  8. }

      结果为:

 

烫烫烫烫烫烫?
 

 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载