我在这里定义了一个结构
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;
}
当我尝试从main函数中查看值时,我得到了垃圾值。请帮帮我。
答案 0 :(得分:6)
所有者变量的字段使用数据(fatherName
等局部变量)初始化,一旦registerV
退出,就会超出范围。
在此处查看使用std::string
,但您还需要更好地了解内存管理和变量范围。
答案 1 :(得分:3)
让我解决两个一般性问题:
,而不是解决程序中的每个问题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;
}
答案 2 :(得分:2)
所有者所有者之前的struct关键字;没必要。
您可以使用pStruct-&gt;成员直接访问它们,而不是取消引用指针并使用(* pStruct).member访问其成员。
如果你想坚持使用char指针,我个人只需将你的“注册”功能的主体放在main中。
如果您仍然需要该功能,则应使用临时工具中的std::strcpy复制该值。
答案 3 :(得分:0)
变量buyersName
和其他变量是它们所在函数的本地变量,这意味着函数返回后它们的指针无效。
最好的解决方案是使结构成员变量成为正确的C ++字符串。