2012-04-17 15 views
2

は、私は別の関数を使用して本体部に表示する必要があり、ユーザからの入力を取っています。この機能では、所有者C++の関数を使用して構造体の値を更新するにはどうすればよいですか?

struct Owner owner; 

    owner.ownerName="Imran Ali"; 
    owner.fatherName="Ali Khokhar"; 
    owner.adress="KhushalPura"; 
    registerV(&owner); 

} 

を初期化IMここで

struct Owner{ 

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


void registerV(Owner *); 

main(){ 

ここで構造をdefienedました。私はそうしようとすると、私はゴミの値を取得し、メイン関数から値を表示しようとする。しかし、私はゴミ値

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).memberでメンバーにアクセスする代わりに、pStruct-> memberを使用してポインタに直接アクセスできます。

もし私が個人的にメインにあなたの "レジスタ"機能の本体を置くことになるでしょう。

さらに機能が必要な場合は、テンポラリからメンバーにstd::strcpyを使用して値をコピーする必要があります。

6

オーナー変数のフィールドは、registerVが終了すると範囲外になるデータ(fatherNameなどのローカル変数)を使用して初期化されます。

ここでstd::stringを使用して調べますが、メモリ管理と可変範囲の理解を深める必要もあります。

+0

私は文字列型のcuzを使用することはできません。その代入とaiはCHARのみを使用するようにバインドされています.... – xainu31

+0

スタックの場合とヒープメモリを理解する必要がある場合はどちらでも構いません。 –

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

それ。私はポインタなしでそれを試みたが、それは仕事をしなかった。 – xainu31

関連する問題