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