有个库(facesdk),其中的函数需要传递char*的变量
比如通过openfile对话框打开的图像文件
一般情况都是用CString类型变量str存储包含路径的文件名
然后用(LPCTSTR)str来转成Char*对象,然后打开(比如opencv的cvloadImage函数)
通常这种转换问题没有错
但对这个库来说,却总是显示文件没找到,打不开。
百思不得其解!!!!
后来,通过跟踪代码发现网上列出的CString到char*的各种转换方法都有同样的结果,即:进行转换时,每个字符直接都加入的一个空格。
比如CString str("1234"); char* p = (char*)(LPCTSTR)str;
查看p的地址结果如下:p[0]=1;p[1]='\0';p[2]=2;p[3]='\0';p[4]=3..........
即,p="1 2 3 4"!!
这样,导致库所用的函数找不到文件,导致错误。
造成这样的原因在于:工程的配置设置里的字符集设置成了Unicode字符集,将其改为非Unicode字符集后,就不会在字符间加入空格了。