c语言字符串api,c – Windows API如何接受字符串

我必须承认,这总是让我困惑某些

Windows API如何接受字符串.以

SetWindowText()为例.现在任何获取指针的函数通常意味着它不存储该对象,而只是使用传递的指针.因此,调用者有责任确保传递给它的对象随时存在.那么您期望下面将打印出的最终消息是什么?

TCHAR * label = new TCHAR[50]();

_tcscpy( label,_T("allocated string") );

m_wndStaticLabel.SetWindowText( label );

_tcscpy( label,_T("string has changed") );

理论上我希望它打印“字符串已更改”但它打印“已分配的字符串”.同理:

CString label = _T("CString Label");

m_wndStaticLabel.SetWindowText( label );

在这种情况下,一个局部变量’label`的指针正在传递给它,但仍然没有问题.控件总是打印正确的字符串,即使它收到堆栈上分配的字符串指针.

这意味着控件实际上分配了自己的内存,并将其分配给控件而不是我们传递的指针,但这一事实从未记录过.这有点误导吗?当我传递指向函数的指针时,我立即提醒自己的一件事是我不应该在函数返回之前销毁它,但在这种情况下不是这种情况,也没有记录.

所以我的问题最终只是缺少文档,或者当我们将指针传递给一个对象时它还有其他东西,但它的行为就像我们按值传递对象一样?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值