恼人的strtok, strdup问题
来源:互联网 发布:除了在淘宝开店 编辑:程序博客网 时间:2024/05/23 12:31
在一个部署上线的程序中,使用了strtok和strdup来做字符串的分割,在开发机以及多台产品环境中均运行良好。
但是当要规模化部署在近20台机器上时,却发现总会在这些部署机器中,随机发生字符串切割后的不准确性。
在问题定位后,抽取了当中的strtok,strdup的字符串分割代码,实现了一个单元测试。结果很令人吃惊,就算在同一台机器上,以同样的输入条件,来重复运行该程序, 总会有几次切割后的字符串不准确。
这个现象很是让人困扰。google和百度后,也没确定性的解释。暂且记下这个问题,以后来详细分析这个现象。
最后的结果还是决定自己实现一个字符串的切割算法,来替换strtok和strdup的使用。
这个新算法在所有的部署机上运行,都是单一的,正确的结果,成功实现部署,验收通过。
原始代码:
vector<char*>* Util::strSplit(char* a_str, const char a_delim){ vector<char*> * result = new vector<char*>(); char* token = strtok(a_str, &a_delim); while (token) {result->push_back(strdup(token)); token = strtok(0, &a_delim); } return result;}
更新后的代码:
vector<char*>* Util::strSplit(char* a_str, const char a_delim){vector<char*> * result = new vector<char*>();char* head = a_str;char* temp = a_str;int idx = 0;while(*temp != '\0' && temp != NULL){if(*temp != a_delim){temp++;idx ++;}else{char* content = (char*)malloc(sizeof(char) * (idx + 1));strncpy(content, head, idx);content[idx] = '\0';result->push_back(content);idx = 0;temp++;head = temp;}}char* content = (char*)malloc(sizeof(char) * (idx + 1));strncpy(content, head, idx);content[idx] = '\0';result->push_back(content);return result;}
需要分割的字符串为“:”分隔,大致如下所示:
resourcepool:10.xxx.x.32:9123:cmd heartbeat xxx MAQ-01 xxx :;pdu1,10.xxx.x.130,10086,0,1:cmd reset resourceName-xxx
0 0
- 恼人的strtok, strdup问题
- strdup和strtok应用实例
- iFix恼人的ReplacePicture问题
- 很恼人的static问题
- strdup();strtok();sscanf(…
- 恼人的问题,开发环境重装
- 恼人不休的问题:什么是软件配置管理?
- 关于strtok的参数问题
- 由strdup及strndup想到的一些问题
- 单引号双引号和其它特殊字符的恼人问题
- Css 中添加class 引起的恼人问题 必看必看
- strdup函数的用法!
- strdup的深度解析
- strdup函数的使用
- strdup函数的用法
- strdup的用法
- strdup()函数的用法
- strdup的使用技巧
- 【翻译自mos文章】job 不能自动运行--这是另外一个mos文章,本文章有13个解决方法
- POJ 2362 Square 经典DFS回溯
- Java中标签的使用
- 链接们 个人链接 不要进
- leetcode 之Binary Tree Level Order Traversal I和II 解题思路
- 恼人的strtok, strdup问题
- 2014年上半年工作随记
- [转载]安装openmpi
- ACdream原创群赛(16) F
- [AppArmor-GUI]一、Ubuntu下Qt开发环境的搭建
- 【内存数据库】Timesten安装过程全记录
- 旅行app功能
- wikioi1191 数轴染色
- FPGA研发之道(9)架构设计漫谈(三)并行与复用