调试时发现的一个奇怪的现象,static int = 0时无法自增
2016-06-02 00:48
405 查看
void Regex(char* buf) { char pattern[512]="<img\\ssrc=\"http://(\\S+.jpg)"; static regmatch_t pm[2]; static size_t nmatch = sizeof(pm);//这里的我本想得到2这个值,下面的注释才是正确的写法 //static size_t nmatch = sizeof(pm)/sizeof(regmatch_t); regex_t reg; if (0 != regcomp(®,pattern,REG_EXTENDED)) { cout<<"regcomp error"<<endl; return ; } int offset = 0; while (0 == regexec(®,buf + offset,nmatch,pm,REG_NOTBOL)) { string strTemp; strTemp.insert(0, buf + offset + pm[0].rm_so, pm[0].rm_eo - pm[0].rm_so ); cout<<strTemp<<endl; offset += pm[0].rm_eo + 1; static int count = 0; ++count; cout<<"count = "<<count<<endl; } regfree(®); return ; }
今天调代码时惊奇的发现,多次调用该函数,结果 static int count 的输出一直为0,感觉很诡异,然后又把count的初值改为非0值,结果count的输出就正常了, 不过这更让我费解,到底是为什么?最开始还怀疑是编译器的问题;
细心查找后才发现问题的原因所在:
是因为sizeof(pm) 的原因,这句本应该写为sizeof(pm)/sizeof(regmatch_t); 代码逻辑才正确。
虽然在这段代码中 static count 的值不能正常递增的原因找到了,但是其根本是什么原因呢?
是因为内存越界了吗?
是处在编译的问题吗?
为什么count初值不设为0时就能正常递增呢?
如果您明白,请指导一下!感谢
相关文章推荐
- C#中sizeof的用法实例分析
- 浅析C语言中的sizeof
- 深入sizeof的使用详解
- C语言中的sizeof操作符用法及和strlen的区别
- sizeof()的简单介绍
- C语言中sizeof()与strlen()函数的使用入门及对比
- 基于Sizeof与Strlen的区别以及联系的使用详解
- 浅析C/C++中被人误解的SIZEOF
- 解决不用sizeof求出int大小的方法
- C++ sizeof 实例解析
- C语言中关于sizeof 和 strlen的区别分析
- 对C语言中sizeof细节的三点分析介绍
- 关于操作系统各种数据类型的内存分配的一点探讨
- Sizeof与Strlen的区别与联系
- sizeof使用
- C语法陷阱:理解如何声明一个数组
- sizeof,strlen
- sizeof(struct)内存分配分析
- sizeof(struct)分析(包括union)
- 第三天学习笔记