2009-02-07 74 views
0

我想使用GDI +位图类将IStream转换为HBITMAP。 IStream对象正在使用来自Web服务的数据进行填充。我正在读取部分数据并将其附加到稍后与Bitmap类一起使用的对象。在vC++中正确使用char数组

下面是代码

 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循环时,数据1会给出访问冲突异常。

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

回答

1

首先,小心字符串文字。像""这样的字符串文字的类型是const char*,所以你不能写信给他们。我并不完全确定你的构造char data1[] = ""是否可写,但即使如此,你也只有2个字符的内存,而你(我想)试图读取1023字节到data1的位置。试试这个:

char* data1 = static_cast<char*> (std::malloc (1024 * sizeof (char)); 

... 

std::free (data1); 

// or try this 
char data1 [1024] = { 0 }; // Gives you 1024 bytes to write to on the stack 

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