2010-11-19 10 views
1

parse_commandline()から項目struct内のファイルを変更したいと思います。構造体を関数から変更しますか?

strncpyを使用してmain()からitems->ファイルを変更できますが、parse_commandline()では問題はありません。 parse_commandline()を修正して、main()の項目に関する情報を受け取れるようにする必要があります。どうすればいいでしょうか?

typedef struct { 
    int pack_01; 
    int pack_02; 
    char file[100]; 
} items; 

static items character_y = { 1, 1 } 

parse_commandline(int argc, char *argv[]) 
{ 

/* PARSE COMMANDLINE ARGUMENTS */ 

} 

int main(int argc, char* argv[]) 
{ 
    items *ptr_items = &character_y; 

    parse_commandline(argc,argv); 

    return 0; 
} 
+0

parse_commandlineに追加のパラメータを渡すだけではいかがですか。 'parse_commandline(int argc、char * argv []、items * ptr_items)'? –

+0

これはうまくいかないようです - 警告:互換性のないポインタ型から 'parse_commandline'の引数3を渡してください 注: 'struct items *'は期待されていますが、引数は 'struct items **'型です。 –

+0

'items'はデータ型インスタンスは変更できますが、インスタンスを指定していません。あなたのサンプルコードでは、 'items'の唯一のインスタンスは' main() 'と' parse_commandline() 'の両方で見える' character_y'です。それはおそらく悪いデザインではなく、なぜそれにアクセスできない。 – Clifford

答えて

1

これを行う方法はparse_commandline関数にitem Sへのポインタを渡し、関数がベースの構造を更新してみましょうです議論について。

parse_commandline(int argc, char *argv[], items* pItems) { 
    pItem->pack_01 = 42; 
    ... 
}; 

int main(int argc, char* argv[]) { 
    items items; 
    parse_commandline(argc, argv, &items); 
    ... 
} 
+0

これはエラーなしでコンパイルします。他の変数をcharacter_yから初期化した "file"の横に置くことは可能ですか、またはあなたの例で示すようにparse_commandlineから手動で渡すべきですか?この質問が理にかなっているかどうかはわかりません。 –

0

構造体をC言語の関数に渡すことは、他の変数を渡すことと変わりありません。あなたのケースでは、あなたが呼び出し側の構造を変更することができるように、あなたが参照することによってそれを行う必要があります。

void parse_commandline(int argc, char *argv[], items *theItems) 
関連する問題