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

     首现介绍所遇到问题的背景,之前的程序是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);


 


      





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值