高手进

x363635334 2013-04-14 01:11:31

CString cs1,cs2("xxx");
cs1.Format("%s%s",cs2,cs2.GetBuffer());

该函数内部如何辨别CString还是char*

va_arg得到的实参必然是unsinged int*啊,看作char*无妨,怎么CString型也能随意找对呢
发现其内部用的是vsprintf绝不是operator重载
...全文
145 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
追求执着 2013-05-03
  • 打赏
  • 举报
回复
lm_whales 2013-05-03
  • 打赏
  • 举报
回复
cs2 内部只有一个指针 该指针指向字符串。 所有其他数据都在指针前部(内存分配时同时分配了字符串以及串长和其他数据的空间 大概如下 |字符指针的位置 引用计数等 ,length,"abcdefg" CString 数据结构大概如下 CString { char *p; }; 除了指针并无其他内容。 如果把它拷贝到栈上正好拷贝了一个char 指针; 如果使用隐式转换,CString 也定义了转换运算符。 无论如何,都会把这个类的对象当做一个指针使用。 于是 cs1.Format("%s%s",cs2,cs2.GetBuffer()); char *s2="xxx"; 和cs1.Format("%s%s",s2,cs2.GetBuffer()); 没有什么不同!!
x363635334 2013-04-14
  • 打赏
  • 举报
回复
既然都是const char* 到了栈上就没有第三方类类型这个概念了
x363635334 2013-04-14
  • 打赏
  • 举报
回复
同样是%s 我既传给你char*又传CString,抛开那个系统的函数不谈,阁下如何应对
图灵狗 2013-04-14
  • 打赏
  • 举报
回复
va_arg全部是const char*类型的,用的是vsprintf类底层,不是重载。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧