以下代码用于测试将char *字符串强制转换为类指针时会发生什么。在类中有三个字符串数据和一个整数。当我以字符串格式打印类时,数据按预期列出。但是我如何才能知道类中变量的值?为什么会发生这种情况?
#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("%s\n",c);
return 0;
}
答案 0 :(得分: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
控制的内部缓冲区,因此这种强制转换毫无意义。
你需要告诉我们你实际想要达到的目标,然后我们可以建议一个好方法。