我在头文件中定义了LPCTSTR 变量,不知为什么在其他文件中访问时内容发生的变化(我只对它做了一次操作)如果定义成'char* const' 就不能对其进行操作了。请问我该怎么办?

解决方案 »

  1.   

    1.char* const str :表明是你的指针是一个常量,这个指针指向一个字符串char* const str = new char[100];
    strcpy(str,"hello");  // 正确char* const str2 = new char[100];
    strcpy(str2,"world");str = str2 // 错误! 因为str是常量2. const char*  str : 表明你的指针指向的是常量
    const char* str = new char[100];
    strcpy(str,"hello");
    str[0] = 't';  // 错误,因为指针指向的是常量3. const char* const str: 表明你指针是常量,指向的内容也是常量。
    LPCTSTR : L--long   P---Point   C---Const  STR:string
    看名字就知道是一个常量指针了。
      

  2.   

    const char* p; // non-const pointer, const data
    char* const p; // const pointer, non-const data
    const char * cosnt p; // const pointer, const data
      

  3.   

    把他定一成static类型就行了,如static int i;这样应用程序给这个变量在全局开辟一个固定地址,这样就不会随意改变了,除非在你的局部有同名的变量.
      

  4.   

    你的问题阐述的不是太清楚,我不知道你对全局变量进行了什么操作,我只能就我的理解说一些。    全局变量(或外部变量)的作用域为从变量的定义处开始,到本程序的文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变量分配到静态存储区。在其他文件(没有定义全局变量)或定义点之前想引用外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。全局变量具有“记忆”功能,即在整个程序结束之前,不释放内存,它保存着最近一次执行的结果,整个程序结束之后,释放内存(释放执行结果)。下一次执行时,又保持初始状态。
       不知道你是否按上述方法定义和操作全局变量。
      

  5.   

    我是按你所描述的方法定义的!我对于变量进行了一次赋值
             LPCTSTR    g_UserCode;//全局
             _bstr_t    p_Sql;     //局部
             ...
    p_Sql = e_Recordset->GetCollect("fcode").bstrVal;
    g_UserCode = p_Sql;   //我的这种操作对吗?,直接赋给g_UserCode会错??这是在开始时赋的数值,以后就没有动过了。
    我看了一下,变量的指针没有变,指针里的值变了,而且每次运行指针里的值都不同???
      

  6.   

    把一个局部指针变量赋给一个全局变量有什么意义? 那个_bstr_t p_Sql一出作用域就被干掉了,这时g_UserCode指向一处"你说是什么"的区域.
      

  7.   


        e_Recordset->GetCollect("fcode").bstrVal 的值怎么样才能直接赋给LPCTSTR?我原来是打算把p_Sql当成一个中转的。
      

  8.   

    试试看:TCHAR g_UserCode[256];...
    lstrcpy(g_UserCode,(LPTSTR)(e_Recordset->GetCollect("fcode").bstrVal));
      

  9.   

    呵呵,LPCTSTR只是一个指针,当然不能直接使用了如Zark(金陵五月) 所说的,定义一个数组,或者使用前
     g_UserCode = new TCHAR[256];
    然后,将值拷贝进来才行啊如果用MFC的话,用CString岂不是更方便
      

  10.   


    g_UserCode =(LPCTSTR) e_Recordset->GetCollect("fcode").bstrVal;