教你用恶心的strtok函数来恶意修改const string &str 中的str
2016-03-28 23:12
441 查看
大概在两年前, 我踩了一次strtok的坑, 并在博文中做了记录, 永远不要用strtok, 最近再次遇到此坑, 先不多说。 我来教你用恶心的strtok函数来恶意修改const string &str 中的str:
结果:
taoge@localhost Desktop> g++ main.cpp
taoge@localhost Desktop> ./a.out
ab
cd
efg
h
|abcdefgh
|abcdefgh
taoge@localhost Desktop>
我们看到, 调用Str2Vector后, s的值居然就改变了, 更为奇葩的是,t的值也改变了。 把const string &str中的&去掉, 结果也一样。
为什么会这样呢? 因为strtok很恶心, 有兴趣的朋友随便在网上一搜, 对strtok的骂声一片啊。
还有人说: 是你自己不会用strtok. 我要说: 少装逼。
在下面博文中, 我会继续对strtok口诛笔伐。
#include <string> #include <iostream> #include <vector> #include <cstring> using namespace std; int Str2Vector(const string& str, vector<string> &v, const char *p) { v.clear(); char *pTmp = strtok(const_cast<char *>(str.c_str()), p); while(NULL != pTmp) { v.push_back(pTmp); pTmp = strtok(NULL, p); } return v.size(); } int main() { string s = "|ab|cd|efg|h|"; string t = s; vector<string> v; Str2Vector(s, v, "|"); for(vector<string>::iterator it = v.begin(); it != v.end(); ++it) { cout << *it << endl; } cout << s << endl; cout << t << endl; return 0; }
结果:
taoge@localhost Desktop> g++ main.cpp
taoge@localhost Desktop> ./a.out
ab
cd
efg
h
|abcdefgh
|abcdefgh
taoge@localhost Desktop>
我们看到, 调用Str2Vector后, s的值居然就改变了, 更为奇葩的是,t的值也改变了。 把const string &str中的&去掉, 结果也一样。
为什么会这样呢? 因为strtok很恶心, 有兴趣的朋友随便在网上一搜, 对strtok的骂声一片啊。
还有人说: 是你自己不会用strtok. 我要说: 少装逼。
在下面博文中, 我会继续对strtok口诛笔伐。
相关文章推荐
- 关于iPhone尺寸与分辨率
- 利用中介者模式模拟两个对象对话 C++
- 关于false aliasing的一些看法
- 重加加戴TABLE
- Hive学习之五 《Hive进阶—UDF操作案例》 详解
- 利用shell输入整块文字
- System.nanoTime与System.currentTimeMillis的区别
- How to know that a triangle triple exists in one array?
- 积极向上的佳句(2)
- MySql注释
- iOS 封装UITabBarController(二)
- 初学Java之九九乘法
- 检测iOS的APP性能的一些方法
- 关于springMVC中ModelAndView向web传值得问题
- AndroidStudio Run‘app’报错
- SVN设置Hooks自动群发更新邮件
- 递归全排列学习笔记
- uva 140 bandwidth (好题) ——yhx
- 复利计算--4.0 单元测试之JAVA版-软件工程
- 大型网站核心架构要素 之一(总览篇)