程序中unicode与多字节字符集的相关问题

来源:互联网 发布:弱点 知乎 编辑:程序博客网 时间:2024/05/21 19:44

     首现介绍所遇到问题的背景,之前的程序是vc6.0的版本,现在要移植到vs2008上做开发,移植过来后出现了报了很多数据类型之间转换的错误。

     典型的问题部分代码如下:

            CString path;

            path=".\\bocai.txt";

            FILE *fp;

           fp=fopen(path,"w");

    报的错误如下:error C2664: “fopen”: 不能将参数1 从“CString”转换为“const char *”

      后来查了相关的资料,总结的原因主要与编译器所使用的字符集有关。

      在vc6.0中默认的字符集是多字节字符集,vs2008中默认的是unicode,在vc6.0转到vs2008时就出现了上述的问题。关于unicode与多字节字符集的区别会在单独一篇文章中再讨论。

      这里给出我试过的 几种解决方案:

      解决方法1:项目—>属性—>常规,将字符集的选项有unicode改为多字节字符集。


       解决方法2:将fopen改为_tfopen版本,字符串前加上宏_T(),代码如下:

                                                 CString path;

                                                 path=".\\bocai.txt";

                                                 FILE *fp;

                                                 fp=_tfopen(path,_T("w"));

    因为,fopen是c语言的库函数,是ascii字符集版本的函数,_tfopen适用与ascii或unicode字符集,在字符串前加上宏_T()可以保证字符串的兼容性。


    解决方法3:改为c++的写法,代码如下:

                                              CString path;

                                              path=".\\bocai.txt";

                                              ofstream outfile;

                                              outfile.open(path);


 


      





原创粉丝点击