2

我在这里定义了一个结构

struct Owner{

char* ownerName;char* fatherName;char* address;};


void registerV(Owner *);

main(){

我在这里初始化所有者

struct Owner owner;

  owner.ownerName="Imran Ali";
  owner.fatherName="Ali Khokhar";
  owner.adress="KhushalPura";
  registerV(&owner);

}

在此功能中,我从用户那里获取输入,我必须使用另一个功能在主要部分中显示这些输入。但是当我尝试这样做时,我会得到垃圾值

void registerV(struct Owner *ownerPtr)
{

 char buyersName[50];
 char fatherName[50];
 char adress[100];

 cin.getline(buyersName, 50);
 cout << " Enter Buyers Name : " ;
 cin.getline(buyersName, 50);
 (*ownerPtr).ownerName=buyersName;

 cout << " Enter Fathers Name : " ;
 cin.getline(fatherName, 50);
 (*ownerPtr).fatherName=fatherName;

 cout << " Enter Adress : " ;
 cin.getline(adress, 100);
 (*ownerPtr).adress=adress;
}

当我尝试从主函数查看值时,我得到垃圾值。请帮我。

4

4 回答 4

6

fatherName您的所有者变量的字段使用退出后超出范围的数据(局部变量,例如 )进行初始化registerV

在这里查看使用std::string,但您还需要更好地理解内存管理和变量范围。

于 2012-04-17T16:58:02.197 回答
3

让我解决两个一般性问题,而不是解决程序中的每个单独问题:

  1. 不要使用指针。相反,按值传递和返回对象。
  2. 不要使用char数组。相反,使用std::string.

试试这个:

// Untested code

#include <iostream>
#include <string>

struct Owner{
  std::string owner;
  std::string father;
  std::string address;
};

Owner registerV();

main(){
  struct Owner owner;

  owner = registerV();
}

Owner registerV() {
  Owner result;

  std::cout << " Enter Buyers Name : ";
  std::getline(std::cin, result.ownerName;

  std::cout << " Enter Fathers Name : " ;
  std::getline(std::cin, result.fatherName);

  std::cout << " Enter Adress : " ;
  std::getline(std::cin, result.address);

  return result;
}
于 2012-04-17T17:02:22.207 回答
2

Owner 所有者之前的 struct 关键字;是不必要的。

您可以使用 pStruct->member 直接访问它们,而不是取消引用指针并使用 (*pStruct).member 访问它们的成员。

如果您想坚持使用 char 指针,我个人会将您的“注册”函数的主体放在 main 中。

如果你仍然需要这个函数,你应该使用std::strcpy从你的临时成员复制值。

于 2012-04-17T17:09:02.497 回答
0

变量buyersName和其他变量对于它们所在的函数是局部的,这意味着指向它们的指针在函数返回后无效。

最好的解决方案是使结构成员变量成为正确的 C++ 字符串。

于 2012-04-17T16:58:19.427 回答