在vc ++中正确使用char数组

时间:2009-02-07 09:21:33

标签: visual-studio-2008 visual-c++ gdi+

我正在尝试使用GDI + Bitmap类将IStream转换为HBITMAP。使用来自Web服务的数据填充IStream对象。我正在读取部分数据并将其附加到稍后将使用Bitmap类的对象。

以下是代码的相关部分

        char data1[] = "";
        int offset = 0;

        LPTSTR pszString = NULL;
        LPSTREAM lpStream = NULL;

        CreateStreamOnHGlobal(NULL, TRUE, &lpStream);
        StreamStringCopy ((LPSTREAM)lpStream, (LPCTSTR)"");
        while(of->pread(&data1,1023,offset) > 0){
            LPCTSTR tempStr = data1;
            StreamStringCat ((LPSTREAM)lpStream, tempStr);
            offset = offset + strlen(data1);    
        }
        Bitmap bm(lpStream,FALSE);
        bm.GetHBITMAP(Color.Black, &ret);

StreamStringCat将字符串附加到LPSTREAM对象,这样我就可以得到一个LPSTREAM对象。

循环第一次运行正常。再次输入while循环时,& data1会发出Access违例异常。

有人可以告诉我应该如何解决这个问题。 感谢。

1 个答案:

答案 0 :(得分:1)

首先,要小心字符串文字。像""这样的字符串文字属于const char*类型,因此您无法写入它们。我不完全确定你的构造char data1[] = ""是否使它可写,但即使这样,你只有2个字符的内存,而你(我想)尝试读取{{1的位置1023个字节}}。试试这个:

data1

这会分配一些可以写入的内存。我想在第一次运行后,你已经覆盖了一些内存,导致下次运行时出现访问冲突。