C&C++给“带变长参数的函数”传递参数的问题

作者:半瓶墨水   链接:http://www.2maomao.com/blog/c-c-pass-param-to-valist-issue/

今天遇到一个头大的问题,搞了3、4个小时还没搞定

有个wstring类,重载了LPCTSTR,按道理能够自动转义的
下面这段代码用起来就有问题:
wstring str;
wprintf(L”Let’s see what’s inside :%s”, str);

编译通过,运行出错,Access Violation,很严重的那种错误

后来看到汇编码才反应过来,加上梦笔涂鸦男的帮助终于搞定。

wprintf只检查第一个参数,他从堆栈里面取出一个个变量,其实是看作一坨坨的(VOID*)看待的,虽然看到%s的时候会用LPCTSTR把对应的参数转义,但是这相当于:(LPCTSTR)(LPVOID)str,这时候,得到的LPCTSTR并没有调用wstring的这个转义函数,AV就不奇怪了。

sigh,变长参数一定要小心啊。

留下回复