2012-04-17 51 views
2

我已经defiened的结构这里我如何使用C++中的函数更新结构的值?

struct Owner{ 

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


void registerV(Owner *); 

main(){ 

这里IM初始化所有者

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

当我尝试从主功能我得到的垃圾值查看值。请帮帮我。

回答

2

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

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

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

如果您仍然需要该功能,您应该使用std::strcpy将您的临时值复制到成员。

6

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

请在此处查看std::string,但您还需要更好地理解内存管理和变量范围。

+0

我不能使用字符串类型cuz它的我的任务和ai必然只使用CHAR .... – xainu31 2012-04-17 17:22:36

+0

这很好,无论你应该理解堆栈vs堆内存 – 2012-04-17 20:29:33

0

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

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

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

我只能使用char它的任务,所以即时通讯绑定它。我已经尝试过没有指针,但它没有奏效。 – xainu31 2012-04-18 04:59:10

相关问题