c – 为什么在使用可变参数函数时必须将CString强制转换为LPCSTR
根据
this site,有人知道为什么这些代码不正确:
CString First( "John" ); CString Last( "Doe" ); CString Name; Name.Format( "%s %s",First,Last ); // Name may be garbage text Name.Format( "%s %s",(LPCSTR)First,(LPCSTR)Last ); // this is the correct way Microsoft的CString::Format文档说:
我总是使用“错误的”方式(没有LPCSTR演员),我从来没有遇到过问题. 我在这里错过了什么吗? 解决方法
因为在Format函数内部没有执行强制转换,就像在为printf()指定参数时没有执行强制转换一样
如果你写printf(“%d”,a);因为printf假定%d已经告诉了a是什么数据类型,所以没有对其进行强制转换. 为了确保将CString转换为LPCSTR即%s,您需要转换将在返回LPCSTR的CString上调用操作符的参数.在CString的更高版本中,存储字符串,以便在没有强制转换的情况下进行编写时,它仍将作为LPCSTR打印,但确保最好进行强制转换. 或者换一种方式:当一个可变参数函数遍历参数时,它使用格式说明符来知道参数的大小,如果格式说明符与参数不匹配则会产生垃圾.由于CString没有格式说明符,因此需要将CString转换为LPCSTR. 顺便说一句,你应该在C中使用static_cast< LPCSTR>(第一个),static_cast< LPCSTR>(最后) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |