当前位置:  技术问答>linux和unix

strncasecmp memcmp都不行,奇怪

    来源: 互联网  发布时间:2017-01-15

    本文导语:  在LINUX上接收到一段数据保存到内存BUF中,然后我在这段BUF中查找自己想到的一个串的起始位置,查找函数的代码如下 int SearchPostion(char* TagString,char* Buf,unsigned int BufLen) { int iStrLen = strlen(TagString); unsigned int iIn...

在LINUX上接收到一段数据保存到内存BUF中,然后我在这段BUF中查找自己想到的一个串的起始位置,查找函数的代码如下

int SearchPostion(char* TagString,char* Buf,unsigned int BufLen)
{
int iStrLen = strlen(TagString);
unsigned int iIndex = 0;

for (iIndex=0;iIndex这里文件就结束了的
""/>

  



然后我又用B的方式去读写,结果没有上面的现象,都是正常的,谁能解释下原因啊!怎么回这样!简直不理解,内存查找函数我看了N遍了,感觉没有错,而且有时也是正确的,求大牛来解释!1

|
看看buf里的数据是不是这样的形式:
xxxxxxxxxxxx
这样打印的时候看不到后面的数据

|


所谓的文本和二进制是人类自己编造的,文件里只有一个一个的字节。

文本里的一行是根据某一个字节是'n'确定的,其他文本特征对于LINUX系统来说完全没用。

(PS:对于WINDOWS还是有区别的,linux用read返回0判断文件结束,windows以某个特殊的字节值作为文件结束,所以windows程序员通常更容易碰到郁闷的问题却不知道为什么)

|
如果你想把它当做二进制就别用strlen这些东西。

你错在哪很难说,描述的有点乱 =,=

关键就是:文件里只有字节,如果这些自己的本意是ascii字符,那可以strlen,如果本意不是ascii字符,那它们就是字节流,不能用strlen。

|


通常你关注的地方不是错误的根源,如果这么一个简单的BUG卡你N天,真没话说。

|
能gdb不,能就上gdb,什么单步断点都给它用上,好好确认下逻辑,呵呵

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3