CString str;
::GetWindowsDirectory((LPSTR)(LPCSTR)str, MAX_PATH);
---------------------------------------------------------
上面这段代码有个很奇怪的问题,就是在大部分机器上都是好的,
但是在很少一部分机器上,在release版本下会出现内存冲突,debug版本
则不会出错。谁能帮我解释下?
::GetWindowsDirectory((LPSTR)(LPCSTR)str, MAX_PATH);
---------------------------------------------------------
上面这段代码有个很奇怪的问题,就是在大部分机器上都是好的,
但是在很少一部分机器上,在release版本下会出现内存冲突,debug版本
则不会出错。谁能帮我解释下?
::GetWindowsDirectory((str.GetBuffer(MAX_PATH), MAX_PATH);
str.ReleaseBuffer();
CString::GetBuffer()
CString str(0, MAX_PATH);
先分配内存,然后在获取,避免内存冲突
::GetWindowsDirectory((LPSTR)(LPCSTR)str, MAX_PATH);
当然有问题。
CString str时候把str指到一个默认的地方,所有的该程序的CString初始化为""时候都是指向那里的。
((LPSTR)(LPCSTR)str你把这个地址去出来用。
::GetWindowsDirectory((LPSTR)(LPCSTR)str, MAX_PATH);
你把你获得的数据放到了一个共用为初始化的地方。
假设此时str值为"111"
此时,如果你在别的地方有定义CString str2=“”
你会发现你的str值变成""了
memset(szPath,0, MAX_PATH+1);
GetWindowsDirectory(szPath,MAX_PATH);
CString str = szPath;