是否可以用=复制?我在类的函数的参数中使用了CString str
想复制给类的成员 CString m_strm_str=str;结果执行出错。请问该怎样复制?

解决方案 »

  1.   

    CString str = "123454";
    CString m_str( str );
    m_str = str;
    strcpy( m_str, str );
    ...
      

  2.   

    Class Test
    {
     CString m_str;
     void Set(CString str);
    }void Set(CString str)
    {
     m_str=str;
    }这样就出错。
      

  3.   

    上述几种都应该可以呀,是不是你的变量访问权限出错?或者其他地方?
    实在不行你可以改成字符数组呀,然后用strcpy()进行拷贝
      

  4.   

    是public的。权限没问题。
    怎么在我的程序中就是不行呢?
      

  5.   

    与编译中这个提示有关么?LINK : LNK4073: cannot create map for .ILK file; linking nonincrementally
      

  6.   

    删除你的目录下面的DEBUG和RELEASE目录,然后重新编译
      

  7.   

    msdn说的,呵呵,就这样:shared memory不够大
    cannot create map for .ilk file; linking nonincrementallyThere was not a large enough contiguous space in shared memory for LINK to create the incremental status (.ilk) file. LINK performed a nonincremental build.
      

  8.   

    建议用API的lstrcpy,若拷贝不行,建议以下方法:Class Test
    {
     CString m_str;
     void Set(CString str);
    }void Set(CString str)
    {
     //先清m_str
     lsrcpy(m_str, "");
     //若m_str.Format("%s", str)不行
     m_str += str;
    }
      

  9.   

    msdn中找到下列:Linker Tools Warning LNK4073
    cannot create map for .ILK file; linking nonincrementallyThere was not a large enough contiguous space in shared memory for LINK to create the incremental status (.ILK) file. LINK performed a nonincremental build.提示你的共享内存没有足够大的空闲块。你看这段信息对你有没有帮助,不过你最好把相关的代码简化后贴出来让我们看一下。
    因为楼上说的几种方法都可以,所以你的问题要看具体情况而定了。
      

  10.   

    编译的时候没有出错。
    但是运行的时候,出现错误信息:
    Unhandled Exception in xxx.exe (MFC42D.dll): 0xC0000005: Access Violation
      

  11.   

    函数是否类似下面这样?
    void func(CString parastr)
    {    CString instr;  ...} 假如你只是想得到这个参数代表的字符串值,用
    void func(CString parastr)更好,直接用等号
    赋值没有问题。假如函数中改动了parastr的值,
    用void func(CString &parastr)定义函数,也是
    直接等号搞定
      

  12.   

    啊,笔误写错一点:
    “假如你只是想得到这个参数代表的字符串值,用
    void func(LPCTSTR parastr)更好”
      

  13.   

    void CBackServer::SetParam( CString Dir,
    CString Ext,
    BOOL IncludeSubDir,
    BOOL AutoClean,
    int SaveDays)
    {
    TRACE("Dir=%s\n\r",Dir);
    m_Dir=Dir;
    m_Ext=Ext; 
    m_IncludeSubDir=IncludeSubDir;
    m_AutoClean=AutoClean;
    m_SaveDays=SaveDays;
    }BOOL CDiskClean::OnApply() 
    {
    // TODO: Add your specialized code here and/or call the base class
    TRACE("Dir=%s Ext=%s \n\r",m_Dir,m_Ext);
    BackServer.SetParam(m_Dir,
    m_Ext,
    m_IncludeSubDir,
    m_AutoClean,
    m_SaveDays);
    return CPropertyPage::OnApply();
    }
      

  14.   

    CString str = "123454";
    CString m_str;memcpy(&m_str, &str, sizeof(CString));
      

  15.   

    楼上的办法也不行。
    BOOL CDiskClean::OnInitDialog() 
    {
    CPropertyPage::OnInitDialog();

    // TODO: Add extra initialization here
    m_AutoClean=BackServer.m_AutoClean ;
    memcpy(&m_Dir,&BackServer.m_Dir ,sizeof(CString));
    //m_Dir=BackServer.m_Dir ;
    memcpy(&m_Ext,&BackServer.m_Ext ,sizeof(CString));
    //m_Ext=BackServer.m_Ext ;
    m_IncludeSubDir=BackServer.m_IncludeSubDir ;
    m_SaveDays=BackServer.m_SaveDays ;
    TRACE("CDiskClean::OnInitDialog %s\n\r",m_Dir);
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
    }
      

  16.   

    在退出时也出现:Unhandled Exception in xxx.exe (MFC42D.dll): 0xC0000005: Access ViolationCBackServer::~CBackServer()
    {
    TRACE("~BackServer\n\r");
    }
      

  17.   

    不仅如此,在TRACE时也出错: TRACE("%s",m_Dir);