读书人

vc2010施用readfile读取数据后总在结尾

发布时间: 2013-02-24 17:58:56 作者: rapoo

vc2010使用readfile读取数据后总在结尾有一串乱码

void main()
{
char *pBuffer;
char Buffer1[10];
DWORD RSize;

HANDLE hOpenFile = CreateFile(L"E:\\a.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);



if (hOpenFile == INVALID_HANDLE_VALUE)
{
hOpenFile = NULL;
}


printf("file=%d\n",fileSize);

pBuffer = (CHAR *) malloc(fileSize);

ReadFile(hOpenFile, Buffer1, sizeof(Buffer1), &RSize, NULL);
printf("sizeof(Buffer1)=%d\n",sizeof(Buffer1));//这里显示10
printf("strlen(Buffer1)=%d\n",strlen(Buffer1));//这里显示23
printf("buff=%s",Buffer1);
free(pBuffer);
}


为什么我用strlen看buffer1里面有23的字符啦? 我不是只定义啦10个字符啦! 为什么多啦13个
而且读出来的数据后面总有一串乱码!

[解决办法]
strlen找到'\0'才算结束的,你读的方式估计Buffer1里都写满数据了,而没有'\0',
程序其实还有可能会死的,你人品好没死掉
没有'\0',strlen属于非法调用,没有意义
[解决办法]
void main()
{
char *pBuffer;
char Buffer1[10];
DWORD RSize;

HANDLE hOpenFile = CreateFile(L"E:\\a.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);
if (hOpenFile == INVALID_HANDLE_VALUE)
{
hOpenFile = NULL;
}

printf("file=%d\n",fileSize); // fileSize哪来的?

pBuffer = (CHAR *) malloc(fileSize); //最好用memset(pBuffer,0,fileSize);初始化一下内存。

ReadFile(hOpenFile, Buffer1, sizeof(Buffer1), &RSize, NULL); //RSize为多少?
printf("sizeof(Buffer1)=%d\n",sizeof(Buffer1));//这里显示10
printf("strlen(Buffer1)=%d\n",strlen(Buffer1));//这里显示23
printf("buff=%s",Buffer1);
free(pBuffer);
//句柄没有释放,CloseHandle(fOpenFile);
}

[解决办法]
sizeof读到的是你申请的数组的大小。
strlen获得的是你当前数组存的数据的长度。
例如:char temp[10]; strcpy(temp,"asdfghjkloiuy"); sizeof(temp)=10这个是正确的。strlen(temp)=14表示的是“asdfghjkloiuy”的长度。
并且出现乱码的原因是你申请了char Buffer1[10];里面的值没有初始化,全是随机的,memset(Buffer1,0,10),这样设置下就OK了。
按照常理,你的strlen显示的23应该已经出现内存泄露了,但是不晓得你的有没有报错,自己仔细看看吧
[解决办法]
void main()
{
char Buffer1[10];
DWORD RSize;

HANDLE hOpenFile = CreateFile(L"E:\\a.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL);

if (hOpenFile == INVALID_HANDLE_VALUE)
{
hOpenFile = NULL;
return;


}
ReadFile(hOpenFile, Buffer1, sizeof(Buffer1), &RSize, NULL);
printf("RSize=%d\n",RSize);
CloseHandle(hOpenFile);
}

读书人网 >C++

热点推荐