首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-02-24 
vc2010使用readfile读取数据后总在结尾有一串乱码void main(){char *pBufferchar Buffer1[10]DWORD RSiz

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

热点排行