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

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

本文关键字:更新 结构 函数 C++ 何使用      更新时间:2023-10-16

我在这里蔑视了一个结构

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 直接访问它们。

如果你想坚持使用字符指针,我个人只会把你的"寄存器"函数的主体放在main中。

如果您仍然需要该函数,则应使用 std::strcpy 将值从临时函数复制到成员。

变量

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

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