类和char *之间的强制转换

Compulsory transformation between class and char *

本文关键字:转换 之间 char 类和      更新时间:2023-10-16

下面的代码用于测试将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->tableNamec->Attribute

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

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

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