[实践OK]字符串截取函数--C语言memcpy函数,拷贝二进制的包体只能这个函数了,相关函数不能用的。

jackxiang 2015-4-2 16:59 | |
背景:C语言不如PHP语言在字符串处理上有较大的灵活性,如取一个字符串的前N个可以有strncpy,但是如果想取从第N位的后M个字符怎么办?得自己写。
其实有strstr结合memncpy来做这个事情,c指针字符串指针查到某个串后指向哪儿并找到一个位置后,如何拷贝此时指针位置前面的字符串,链接在:http://jackxiang.com/post/7933/

你上传的文件是二进制的,而strstr是字符串处理函数,遇到\0就不会往后继续查找了。strlen也是字符串处理函数。这种情况,拷贝使用memcpy,程序记住拷贝的len,查找需要自己用指针移动实现。
昨天不是说过了么,二进制数据不能使用字符串处理函数
罗毅峰拷贝一个上传具有二进制的包体的相关字符串不用用的拷贝方法:


recvlen就是总长度吧,p = strstr(szTmpBuf,headerSepFlag);//p指向这个\r\n\r\n 的这儿:
后,用p-szTmpBuf 也就是这个http的header长度。
再用recvLen 就是总长度,recvLen-(p-szTmpBuf) 这就是body的长度,
后再用: memcpy(httpBody,p+4,recvLen-(p-szTmpBuf));  就能拷贝进去?
罗毅峰新  10:49:45
yes
szTmpBuf也是指针,指针减指针,得到的是距离长度。szTmpBuf和p都是char *类型
——————————————————————————————————


[root@iZ25dcp92ckZ multepoolserver]# gcc strstr.c  -o strstr
[root@iZ25dcp92ckZ multepoolserver]# ./strstr
p=lobal View
content = bal View

————————————————————————————————————————————————————————————————



[root@iZ25dcp92ckZ multepoolserver]# ./strstr
httpHeader=Golden G
p=lobal View
content = bal View

——————————————————————————————————————————————————————————————

这里学习到获得字符串标识位后面的几位:

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/7931/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2015-6-12 11:30
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]