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