我有两个结构

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/

10-11 19:14