传入的是个char *lpBuffer=new char[size]
但是文本中有\0咋办?
28 个解决方案
#1
如果有\0,那你必须用二进制方式读取了。
#2
读取后,所有读到的内容不都是存在lpBuffer中吗,函数的返回值不是告诉你读了多少个字节吗,那还有什么疑问吗?
#3
文件得用二进制方式打开,不能用文本方式。
#4
和和.比如我想读出来printf打印在控制台上.问题是系统帮了我的忙.认为\0就是结束.结果.没打印全.^_^
#5
虽然现在可以读出来.但我在打印出来.结果.又是这问题..哎:)
#6
看你怎么写了
#7
和和.楼上大哥能不能教一下我.上GG查不出资料.
类似于上边的代码.只能打出ab.但其实要打印的是absdaf
LPCSTR b="ab\0sadf";
printf("%s", b);
类似于上边的代码.只能打出ab.但其实要打印的是absdaf
#8
用%c逐个字符打吧
#9
既然是文本,一般不会有0x00,可能是unicode格式的,你用unicode方式读取下试试
那就挨个打
LPCSTR b="ab\0sadf";
for(int i = 0; i < strlen(b); i++)
printf("%c", *(b + i));
那就挨个打
LPCSTR b="ab\0sadf";
for(int i = 0; i < strlen(b); i++)
printf("%c", *(b + i));
#10
我用notepad看了一下那个文本.读不全的原因的确是有null字符.
看来只好如此了.不过就是不知道还有无其它办法.因为最终我会把文本送入string传出去用.哎
看来只好如此了.不过就是不知道还有无其它办法.因为最终我会把文本送入string传出去用.哎
#12
垃圾百度
#13
别用文本,用字节数组
#14
要是字符太多,单个字符打印太那个了吧。。。可以根据字符串长度,过滤中间的非正常的结束符
#15
谢谢大家.我去写代码.一会结.也会发代码上了给以后须要的人
#16
up。。。用BYTE数组
#17
我支持鹦鹉.不喜欢兔子. 嘿嘿
#18
用unsigned char*读取,然后输出可以用printf("0x%0X",uchar[i]);输出.
#19
为什么呢?
不过这话虽然我爱听,不过私下告诉我就行了,否则兔子会不高兴的,你不知道兔子都是红眼么。
#20
up........
#21
目前我的水平只有这种方法.
tempVal--string
当遇到\0就跳出去.不用在一个字符一个字符的复制..
strLen=strlen((LPCSTR)lpBuffer);
if (dwSize!=strLen)//有\0字符
{
for (int i=0;i<dwSize;++i)
{
char c=*(lpBuffer+i);
if ('\0'!=c)
{
tempVal.push_back(c);
}
else
{
lpBuffer+=i+1;
goto ADD;
}
}
}
ADD:
tempVal.append((LPCSTR)lpBuffer);
tempVal--string
当遇到\0就跳出去.不用在一个字符一个字符的复制..
#22
你的头像太丑了.我看着有自信.哈哈.
#23
我也遇到过,从内存里面读出来的数据有的是 0,用的 unsigned char 数组,然后用 format %s 这样,直接0开始就断了,然后用的是
一个一个的 %x 这样的给值给CString 就没出错了
一个一个的 %x 这样的给值给CString 就没出错了
#24
#25
读出的内容放在 char[MAX_LEN] 或者char* 中,不要用CString,CString遇到\0就结束了。
#26
对于包含null的文件,用字符串相关函数或类处理本来就是错误的。不知道楼主到底想干吗
#27
写小偷程序.文件是别个的html.我无权改.那里边有\0字符.
兄台"对于包含null的文件,用字符串相关函数或类处理本来就是错误的。"这句是什么意思?你是指像鹦鹉说的该用数组?我只写这部份.另一部份别人写.但接口里边说了我要返回wstring.和和.没办法.
#28
这没有办法,这是接口定义错误,在这种接口下,是无法准确处理文本的(除非你能把所有null都删除)
所以你应该找你同事说明情况,看看是修改接口,还是删除所有null
在删除null之前,使用string肯定错误
所以你应该找你同事说明情况,看看是修改接口,还是删除所有null
在删除null之前,使用string肯定错误
#1
如果有\0,那你必须用二进制方式读取了。
#2
读取后,所有读到的内容不都是存在lpBuffer中吗,函数的返回值不是告诉你读了多少个字节吗,那还有什么疑问吗?
#3
文件得用二进制方式打开,不能用文本方式。
#4
和和.比如我想读出来printf打印在控制台上.问题是系统帮了我的忙.认为\0就是结束.结果.没打印全.^_^
#5
虽然现在可以读出来.但我在打印出来.结果.又是这问题..哎:)
#6
看你怎么写了
#7
和和.楼上大哥能不能教一下我.上GG查不出资料.
类似于上边的代码.只能打出ab.但其实要打印的是absdaf
LPCSTR b="ab\0sadf";
printf("%s", b);
类似于上边的代码.只能打出ab.但其实要打印的是absdaf
#8
用%c逐个字符打吧
#9
既然是文本,一般不会有0x00,可能是unicode格式的,你用unicode方式读取下试试
那就挨个打
LPCSTR b="ab\0sadf";
for(int i = 0; i < strlen(b); i++)
printf("%c", *(b + i));
那就挨个打
LPCSTR b="ab\0sadf";
for(int i = 0; i < strlen(b); i++)
printf("%c", *(b + i));
#10
我用notepad看了一下那个文本.读不全的原因的确是有null字符.
看来只好如此了.不过就是不知道还有无其它办法.因为最终我会把文本送入string传出去用.哎
看来只好如此了.不过就是不知道还有无其它办法.因为最终我会把文本送入string传出去用.哎
#11
#12
垃圾百度
#13
别用文本,用字节数组
#14
要是字符太多,单个字符打印太那个了吧。。。可以根据字符串长度,过滤中间的非正常的结束符
#15
谢谢大家.我去写代码.一会结.也会发代码上了给以后须要的人
#16
up。。。用BYTE数组
#17
我支持鹦鹉.不喜欢兔子. 嘿嘿
#18
用unsigned char*读取,然后输出可以用printf("0x%0X",uchar[i]);输出.
#19
为什么呢?
不过这话虽然我爱听,不过私下告诉我就行了,否则兔子会不高兴的,你不知道兔子都是红眼么。
#20
up........
#21
目前我的水平只有这种方法.
tempVal--string
当遇到\0就跳出去.不用在一个字符一个字符的复制..
strLen=strlen((LPCSTR)lpBuffer);
if (dwSize!=strLen)//有\0字符
{
for (int i=0;i<dwSize;++i)
{
char c=*(lpBuffer+i);
if ('\0'!=c)
{
tempVal.push_back(c);
}
else
{
lpBuffer+=i+1;
goto ADD;
}
}
}
ADD:
tempVal.append((LPCSTR)lpBuffer);
tempVal--string
当遇到\0就跳出去.不用在一个字符一个字符的复制..
#22
你的头像太丑了.我看着有自信.哈哈.
#23
我也遇到过,从内存里面读出来的数据有的是 0,用的 unsigned char 数组,然后用 format %s 这样,直接0开始就断了,然后用的是
一个一个的 %x 这样的给值给CString 就没出错了
一个一个的 %x 这样的给值给CString 就没出错了
#24
#25
读出的内容放在 char[MAX_LEN] 或者char* 中,不要用CString,CString遇到\0就结束了。
#26
对于包含null的文件,用字符串相关函数或类处理本来就是错误的。不知道楼主到底想干吗
#27
写小偷程序.文件是别个的html.我无权改.那里边有\0字符.
兄台"对于包含null的文件,用字符串相关函数或类处理本来就是错误的。"这句是什么意思?你是指像鹦鹉说的该用数组?我只写这部份.另一部份别人写.但接口里边说了我要返回wstring.和和.没办法.
#28
这没有办法,这是接口定义错误,在这种接口下,是无法准确处理文本的(除非你能把所有null都删除)
所以你应该找你同事说明情况,看看是修改接口,还是删除所有null
在删除null之前,使用string肯定错误
所以你应该找你同事说明情况,看看是修改接口,还是删除所有null
在删除null之前,使用string肯定错误