我有两个结构
struct temp
{
char name[20];
};
struct abc
{
temp *ptr;
int num;
};
这是主要功能。
main()
{
abc *rptr;
strcpy((rptr->ptr)->name,"Wellcome");
cout<<(rptr->ptr)->name; //works
cout<<*((*rptr).ptr).name; //does not work why?
}
我想知道为什么最后一个
cout
不起作用。 最佳答案
该行:
cout << *((*rptr).ptr).name;
不起作用,因为
.
上的操作((*rptr).ptr)
的优先级高于*
使用以下方法修复它:
cout << (*((*rptr).ptr)).name;
重要
请注意,您的代码存在更大的问题:
您正在写入未初始化的指针
rptr
您的结构
abc
包含指向temp
的指针,而不是实例!这样做:
strcpy((rptr->ptr)->name,"Wellcome");
被认为是犯罪!您正在破坏所有的记忆!相反,它应如下所示:
abc *rptr = new abc();
rptr->ptr = new temp();
strncpy(rptr->ptr->name, "Wellcome", sizeof(rptr->ptr->name));
cout << rptr->ptr->name << endl;
delete rptr->ptr;
delete rptr;
修正:
分配
rptr
对象在
ptr
中分配rptr
对象仔细复制“ Wellcome”字符串(添加边界检查)
关于c++ - 因为rptr-> num = 30与(* rptr).num = 30相同,但是*((* rptr).ptr).name为什么不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46794503/