2012-04-17 55 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

相關問題