CString str;
::GetWindowsDirectory((LPSTR)(LPCSTR)str, MAX_PATH);
---------------------------------------------------------
上面这段代码有个很奇怪的问题,就是在大部分机器上都是好的,
但是在很少一部分机器上,在release版本下会出现内存冲突,debug版本
则不会出错。谁能帮我解释下?

解决方案 »

  1.   

    CString str(_T(""));
    ::GetWindowsDirectory((str.GetBuffer(MAX_PATH), MAX_PATH);
    str.ReleaseBuffer();
      

  2.   

    可是,我是在非Unicode环境下用的啊,另外在绝大部分机器上都是正常的,偏偏就几台在release版本下出错,debug也没错。谁再帮忙解释下
      

  3.   

    不喜欢用强制转化
    CString::GetBuffer()
      

  4.   

    在非UNICODE的环境下用TCHAR也是不会出错的。另外,你完全可以
    CString str(0, MAX_PATH);
    先分配内存,然后在获取,避免内存冲突
      

  5.   

    GetWindowsDirectory(str.GetBuffer(0), MAX_PATH);
      

  6.   

    TCHAR在UNICODE被定义的时候它就是宽字符。
      

  7.   

    CString str;
    ::GetWindowsDirectory((LPSTR)(LPCSTR)str, MAX_PATH);
    当然有问题。
    CString str时候把str指到一个默认的地方,所有的该程序的CString初始化为""时候都是指向那里的。
    ((LPSTR)(LPCSTR)str你把这个地址去出来用。
    ::GetWindowsDirectory((LPSTR)(LPCSTR)str, MAX_PATH);
    你把你获得的数据放到了一个共用为初始化的地方。
    假设此时str值为"111"
    此时,如果你在别的地方有定义CString str2=“”
    你会发现你的str值变成""了
      

  8.   

    没发现这个问题呀knightshenbin(勤练内功) ,兄弟能不能发个简单demo说明一下?
      

  9.   

    TCHAR szPath[MAX_PATH +1];
    memset(szPath,0, MAX_PATH+1);
    GetWindowsDirectory(szPath,MAX_PATH);
    CString str = szPath;