读取的txt文件中包含\0或null字符咋办?vc把它当结束符了.如果此符号在第一位.读取的字符串为空

时间:2023-01-15 01:25:26
读取的txt文件中包含\0或null字符咋办?vc把它当结束符了.如果此符号在第一位.读取的字符串为空

传入的是个char *lpBuffer=new char[size]

但是文本中有\0咋办?

28 个解决方案

#1


如果有\0,那你必须用二进制方式读取了。

#2


读取后,所有读到的内容不都是存在lpBuffer中吗,函数的返回值不是告诉你读了多少个字节吗,那还有什么疑问吗?

#3


文件得用二进制方式打开,不能用文本方式。

#4


引用 2 楼 csl312211865 的回复:
读取后,所有读到的内容不都是存在lpBuffer中吗,函数的返回值不是告诉你读了多少个字节吗,那还有什么疑问吗?

和和.比如我想读出来printf打印在控制台上.问题是系统帮了我的忙.认为\0就是结束.结果.没打印全.^_^

#5


虽然现在可以读出来.但我在打印出来.结果.又是这问题..哎:)

#6


看你怎么写了

#7


和和.楼上大哥能不能教一下我.上GG查不出资料.

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));

#10


我用notepad看了一下那个文本.读不全的原因的确是有null字符.
读取的txt文件中包含\0或null字符咋办?vc把它当结束符了.如果此符号在第一位.读取的字符串为空

看来只好如此了.不过就是不知道还有无其它办法.因为最终我会把文本送入string传出去用.哎

#12


垃圾百度
读取的txt文件中包含\0或null字符咋办?vc把它当结束符了.如果此符号在第一位.读取的字符串为空

#13


引用 10 楼 gnhao888 的回复:
我用notepad看了一下那个文本.读不全的原因的确是有null字符.


看来只好如此了.不过就是不知道还有无其它办法.因为最终我会把文本送入string传出去用.哎

别用文本,用字节数组

#14


引用 7 楼 gnhao888 的回复:
和和.楼上大哥能不能教一下我.上GG查不出资料.


C/C++ code
LPCSTR b="ab\0sadf";
                                     
printf("%s", b);

类似于上边的代码.只能打出ab.但其实要打印的是absdaf

要是字符太多,单个字符打印太那个了吧。。。可以根据字符串长度,过滤中间的非正常的结束符

#15


谢谢大家.我去写代码.一会结.也会发代码上了给以后须要的人

#16


up。。。用BYTE数组

#17


我支持鹦鹉.不喜欢兔子. 嘿嘿

#18


用unsigned char*读取,然后输出可以用printf("0x%0X",uchar[i]);输出.

#19


引用 17 楼 gnhao888 的回复:
我支持鹦鹉.不喜欢兔子. 嘿嘿

为什么呢?
不过这话虽然我爱听,不过私下告诉我就行了,否则兔子会不高兴的,你不知道兔子都是红眼么。 读取的txt文件中包含\0或null字符咋办?vc把它当结束符了.如果此符号在第一位.读取的字符串为空

#20


up........

#21


目前我的水平只有这种方法.
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


引用 19 楼 happyparrot 的回复:
引用 17 楼 gnhao888 的回复:
我支持鹦鹉.不喜欢兔子. 嘿嘿

为什么呢?
不过这话虽然我爱听,不过私下告诉我就行了,否则兔子会不高兴的,你不知道兔子都是红眼么。


你的头像太丑了.我看着有自信.哈哈.

#23


我也遇到过,从内存里面读出来的数据有的是 0,用的 unsigned char 数组,然后用 format %s 这样,直接0开始就断了,然后用的是 
一个一个的 %x 这样的给值给CString 就没出错了

#24


读取的txt文件中包含\0或null字符咋办?vc把它当结束符了.如果此符号在第一位.读取的字符串为空
引用 22 楼 gnhao888 的回复:
引用 19 楼 happyparrot 的回复:
引用 17 楼 gnhao888 的回复:
我支持鹦鹉.不喜欢兔子. 嘿嘿

为什么呢?
不过这话虽然我爱听,不过私下告诉我就行了,否则兔子会不高兴的,你不知道兔子都是红眼么。


你的头像太丑了.我看着有自信.哈哈.

#25


读出的内容放在 char[MAX_LEN] 或者char* 中,不要用CString,CString遇到\0就结束了。

#26


对于包含null的文件,用字符串相关函数或类处理本来就是错误的。不知道楼主到底想干吗

#27


引用 26 楼 arong1234 的回复:
对于包含null的文件,用字符串相关函数或类处理本来就是错误的。不知道楼主到底想干吗


写小偷程序.文件是别个的html.我无权改.那里边有\0字符.

兄台"对于包含null的文件,用字符串相关函数或类处理本来就是错误的。"这句是什么意思?你是指像鹦鹉说的该用数组?我只写这部份.另一部份别人写.但接口里边说了我要返回wstring.和和.没办法.

#28


这没有办法,这是接口定义错误,在这种接口下,是无法准确处理文本的(除非你能把所有null都删除)
所以你应该找你同事说明情况,看看是修改接口,还是删除所有null
在删除null之前,使用string肯定错误
引用 27 楼 gnhao888 的回复:
引用 26 楼 arong1234 的回复:
对于包含null的文件,用字符串相关函数或类处理本来就是错误的。不知道楼主到底想干吗


写小偷程序.文件是别个的html.我无权改.那里边有\0字符.

兄台"对于包含null的文件,用字符串相关函数或类处理本来就是错误的。"这句是什么意思?你是指像鹦鹉说的该用数组?我只写这部份.另一部份别人写.但接口里边说了我要返回wstring.和和……

#1


如果有\0,那你必须用二进制方式读取了。

#2


读取后,所有读到的内容不都是存在lpBuffer中吗,函数的返回值不是告诉你读了多少个字节吗,那还有什么疑问吗?

#3


文件得用二进制方式打开,不能用文本方式。

#4


引用 2 楼 csl312211865 的回复:
读取后,所有读到的内容不都是存在lpBuffer中吗,函数的返回值不是告诉你读了多少个字节吗,那还有什么疑问吗?

和和.比如我想读出来printf打印在控制台上.问题是系统帮了我的忙.认为\0就是结束.结果.没打印全.^_^

#5


虽然现在可以读出来.但我在打印出来.结果.又是这问题..哎:)

#6


看你怎么写了

#7


和和.楼上大哥能不能教一下我.上GG查不出资料.

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));

#10


我用notepad看了一下那个文本.读不全的原因的确是有null字符.
读取的txt文件中包含\0或null字符咋办?vc把它当结束符了.如果此符号在第一位.读取的字符串为空

看来只好如此了.不过就是不知道还有无其它办法.因为最终我会把文本送入string传出去用.哎

#11


#12


垃圾百度
读取的txt文件中包含\0或null字符咋办?vc把它当结束符了.如果此符号在第一位.读取的字符串为空

#13


引用 10 楼 gnhao888 的回复:
我用notepad看了一下那个文本.读不全的原因的确是有null字符.


看来只好如此了.不过就是不知道还有无其它办法.因为最终我会把文本送入string传出去用.哎

别用文本,用字节数组

#14


引用 7 楼 gnhao888 的回复:
和和.楼上大哥能不能教一下我.上GG查不出资料.


C/C++ code
LPCSTR b="ab\0sadf";
                                     
printf("%s", b);

类似于上边的代码.只能打出ab.但其实要打印的是absdaf

要是字符太多,单个字符打印太那个了吧。。。可以根据字符串长度,过滤中间的非正常的结束符

#15


谢谢大家.我去写代码.一会结.也会发代码上了给以后须要的人

#16


up。。。用BYTE数组

#17


我支持鹦鹉.不喜欢兔子. 嘿嘿

#18


用unsigned char*读取,然后输出可以用printf("0x%0X",uchar[i]);输出.

#19


引用 17 楼 gnhao888 的回复:
我支持鹦鹉.不喜欢兔子. 嘿嘿

为什么呢?
不过这话虽然我爱听,不过私下告诉我就行了,否则兔子会不高兴的,你不知道兔子都是红眼么。 读取的txt文件中包含\0或null字符咋办?vc把它当结束符了.如果此符号在第一位.读取的字符串为空

#20


up........

#21


目前我的水平只有这种方法.
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


引用 19 楼 happyparrot 的回复:
引用 17 楼 gnhao888 的回复:
我支持鹦鹉.不喜欢兔子. 嘿嘿

为什么呢?
不过这话虽然我爱听,不过私下告诉我就行了,否则兔子会不高兴的,你不知道兔子都是红眼么。


你的头像太丑了.我看着有自信.哈哈.

#23


我也遇到过,从内存里面读出来的数据有的是 0,用的 unsigned char 数组,然后用 format %s 这样,直接0开始就断了,然后用的是 
一个一个的 %x 这样的给值给CString 就没出错了

#24


读取的txt文件中包含\0或null字符咋办?vc把它当结束符了.如果此符号在第一位.读取的字符串为空
引用 22 楼 gnhao888 的回复:
引用 19 楼 happyparrot 的回复:
引用 17 楼 gnhao888 的回复:
我支持鹦鹉.不喜欢兔子. 嘿嘿

为什么呢?
不过这话虽然我爱听,不过私下告诉我就行了,否则兔子会不高兴的,你不知道兔子都是红眼么。


你的头像太丑了.我看着有自信.哈哈.

#25


读出的内容放在 char[MAX_LEN] 或者char* 中,不要用CString,CString遇到\0就结束了。

#26


对于包含null的文件,用字符串相关函数或类处理本来就是错误的。不知道楼主到底想干吗

#27


引用 26 楼 arong1234 的回复:
对于包含null的文件,用字符串相关函数或类处理本来就是错误的。不知道楼主到底想干吗


写小偷程序.文件是别个的html.我无权改.那里边有\0字符.

兄台"对于包含null的文件,用字符串相关函数或类处理本来就是错误的。"这句是什么意思?你是指像鹦鹉说的该用数组?我只写这部份.另一部份别人写.但接口里边说了我要返回wstring.和和.没办法.

#28


这没有办法,这是接口定义错误,在这种接口下,是无法准确处理文本的(除非你能把所有null都删除)
所以你应该找你同事说明情况,看看是修改接口,还是删除所有null
在删除null之前,使用string肯定错误
引用 27 楼 gnhao888 的回复:
引用 26 楼 arong1234 的回复:
对于包含null的文件,用字符串相关函数或类处理本来就是错误的。不知道楼主到底想干吗


写小偷程序.文件是别个的html.我无权改.那里边有\0字符.

兄台"对于包含null的文件,用字符串相关函数或类处理本来就是错误的。"这句是什么意思?你是指像鹦鹉说的该用数组?我只写这部份.另一部份别人写.但接口里边说了我要返回wstring.和和……