类和char *之间的强制转换
Compulsory transformation between class and char *
下面的代码用于测试将char* string强制转换为类指针时会发生什么。在类中有三个字符串数据和一个整数。当我以字符串格式打印类时,数据按预期列出。但是我怎么知道类中变量的值呢?为什么会发生这种情况?
#include<stdio.h>
#include<iostream>
using namespace std;
class IndexInfo
{
public:
IndexInfo(string i,string t,string a,int ty)
{indexName = i;tableName = t;Attribute = a;type = ty;}
string indexName;
string tableName;
string Attribute;
int type;
};
int main(){
string a = "1234567890";
printf("%ld",sizeof(a));
printf("%ld",sizeof(string));
char *b = "asdfghjkl1234567890";
IndexInfo * c = (IndexInfo *) b;
//cout << (*c).indexName << endl;
printf("%sn",c);
return 0;
}
似乎您期望字符串asdfghjkl1234567890
的内容以某种方式分配给c->indexName
, c->tableName
和c->Attribute
。
事实上这是不可能发生的。string
是一个具有自己内部结构的类,而不仅仅是少数char
。string
的二进制布局是它包含指向char
的指针,而不是指向char
s的指针。
这意味着将char*
转换为IndexInfo*
将尝试将字符asdf
重新解释为指向由string
控制的内部缓冲区的指针。asdf
具有十六进制值61 73 64 47
,因此通过强制转换将暗示指针值0x66647361
。因为这不是指向由string
控制的内部缓冲区,所以这种强制转换没有意义。
你需要告诉我们你真正想要达到的目标,然后我们可以建议一个好的方法来实现它。
相关文章:
- 构造函数和转换运算符之间的重载解析
- C ++中无符号位长度类型之间的隐式转换,即uint8_t,uint16_t
- 模板转换运算符在 clang 6 和 clang 7 之间的区别
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- Cxx.jl 在 Julia Complex 和 std::complex 之间进行转换
- 如何在 std::string 和 Aws::String 之间进行转换?
- 转换字符时Arduino DUE 和 Arduino UNO 之间的区别
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 指向 POD 类型的指针之间的静态转换与重新解释转换
- 在 Rcpp 中的字符串类型之间转换时出错
- 如何声明不同类型的模板化类之间的转换
- C 和 C++ 中的函数指针转换之间的差异
- 与浮点转换之间的规范化整数
- 重新解释强制转换和 C 样式转换之间的 C++ 区别
- C++ get 和类型转换之间的用法有什么区别?我应该使用哪一个?
- printf函数参数之间的序列点;转换之间的顺序点是否重要
- Clang和GCC中不明确基类转换之间的行为差异
- 转换之间的双和字节数组,为传输ZigBee API
- 隐式转换和显式转换之间的区别
- interpret_cast和C样式强制转换之间的区别是什么