加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么在使用可变参数函数时必须将CString强制转换为LPCSTR

发布时间:2020-12-16 09:41:54 所属栏目:百科 来源:网络整理
导读:根据 this site,有人知道为什么这些代码不正确: CString First( "John" );CString Last( "Doe" );CString Name;Name.Format( "%s %s",First,Last ); // Name may be garbage textName.Format( "%s %s",(LPCSTR)First,(LPCSTR)Last ); // this is the correc
根据 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文档说:

…When you pass a character string as an optional argument,you must cast it explicitly as LPCTSTR…

我总是使用“错误的”方式(没有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>(最后)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读