今天在研究C++通过ADO连接SQl获得返回值时,发现了奇怪的问题,如下代码:
const char* s = "It's test"; //给定一个初始char*
cout << strlen(s) << endl; //输出长度,显示为9
_variant_t t = _variant_t(s); //把char*转换为_variant_t
char* c = (char*)(_bstr_t)t; //再把_variant_t转换为char*
//下面就是奇怪的地方了
cout << (char*)(_bstr_t)t << endl; //这个转换可以显示正确的字符串
cout << c << endl; //这个转换出来就是乱码
cout << strlen(c) << endl; //输出长度,长度变成了14
按照我的理解,转换后直接输出,和转换后赋给一个变量再输出,应该是一样的吧?
我要利用这个返回的结果,如果不赋给一个变量,后续也没有办法用这个结果。
所以在这个过程中到底发生了什么?求指点,应该怎么来严谨地获取这个结果啊?