Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 在vc+中正确使用字符数组+;_Visual Studio 2008_Visual C++_Gdi+ - Fatal编程技术网

Visual studio 2008 在vc+中正确使用字符数组+;

Visual studio 2008 在vc+中正确使用字符数组+;,visual-studio-2008,visual-c++,gdi+,Visual Studio 2008,Visual C++,Gdi+,我正在尝试使用GDI+位图类将IStream转换为HBITMAP。正在使用web服务中的数据填充IStream对象。我正在部分读取数据,并将其附加到一个对象,以便稍后与位图类一起使用 下面是代码的相关部分 char data1[] = ""; int offset = 0; LPTSTR pszString = NULL; LPSTREAM lpStream = NULL; CreateStreamOnHGlob

我正在尝试使用GDI+位图类将IStream转换为HBITMAP。正在使用web服务中的数据填充IStream对象。我正在部分读取数据,并将其附加到一个对象,以便稍后与位图类一起使用

下面是代码的相关部分

        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给出一个访问冲突异常

有人能告诉我如何解决这个问题吗。
谢谢。

首先,请小心使用字符串文字。像
这样的字符串文字属于
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
char*data1=static_cast(std::malloc(1024*sizeof(char));
...
标准::免费(数据1);
//或者试试这个
char data1[1024]={0};//在堆栈上为您提供1024个要写入的字节
这会分配一些可以写入的内存。我猜在第一次运行之后,您已经覆盖了一些内存,这会导致下一次运行中的访问冲突