当前位置: 技术问答>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
这样打印的时候看不到后面的数据
xxxxxxxxxxxx
这样打印的时候看不到后面的数据
|
所谓的文本和二进制是人类自己编造的,文件里只有一个一个的字节。
文本里的一行是根据某一个字节是'n'确定的,其他文本特征对于LINUX系统来说完全没用。
(PS:对于WINDOWS还是有区别的,linux用read返回0判断文件结束,windows以某个特殊的字节值作为文件结束,所以windows程序员通常更容易碰到郁闷的问题却不知道为什么)
|
如果你想把它当做二进制就别用strlen这些东西。
你错在哪很难说,描述的有点乱 =,=
关键就是:文件里只有字节,如果这些自己的本意是ascii字符,那可以strlen,如果本意不是ascii字符,那它们就是字节流,不能用strlen。
你错在哪很难说,描述的有点乱 =,=
关键就是:文件里只有字节,如果这些自己的本意是ascii字符,那可以strlen,如果本意不是ascii字符,那它们就是字节流,不能用strlen。
|
通常你关注的地方不是错误的根源,如果这么一个简单的BUG卡你N天,真没话说。
|
能gdb不,能就上gdb,什么单步断点都给它用上,好好确认下逻辑,呵呵
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。