繁体   English   中英

如何使用C ++中的函数更新结构的值?

[英]how can i update value of a struct using a function in C++?

我在这里诽谤了一个结构

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;
}

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

所有者变量的字段使用数据(本地变量,例如fatherName )初始化,一旦registerV退出,该数据就会超出范围。

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

让我解决两个一般问题,而不是解决您的计划中的每个问题:

  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;
}

所有者所有者之前的struct关键字; 没必要。

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

如果你想坚持使用char指针,我个人只需将你的“注册”功能的主体放在main中。

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

变量buyersName和其他变量是它们所在函数的本地变量,这意味着函数返回后它们的指针无效。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM