类和char *之间的强制转换

时间:2015-10-08 12:06:51

标签: c++

以下代码用于测试将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;

}

1 个答案:

答案 0 :(得分:0)

您似乎希望字符串asdfghjkl1234567890的内容以某种方式分配给c->indexNamec->tableNamec->Attribute

事实上,这不会发生。 string是一个具有自己内部结构的类,而不仅仅是少数char个。 string的二进制布局是它包含指向char的指针,而不是char s。

这意味着将char*转换为IndexInfo*将尝试将字符asdf重新解释为指向由string控制的内部缓冲区的指针。 asdf具有十六进制值61 73 64 47,因此通过强制转换将意味着指针值0x66647361。由于这并未指向由string控制的内部缓冲区,因此这种强制转换毫无意义。

你需要告诉我们你实际想要达到的目标,然后我们可以建议一个好方法。