2010-11-19 89 views
1

我想修改来自parse_commandline()的items结构中的文件。从函数修改结构?

我可以没有问题通过使用strncpy而不是从parse_commandline()从main()修改items->文件。我需要修改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

为什么不只是传递一个额外的param到parse_commandline,例如, 'parse_commandline(int argc,char * argv [],items * ptr_items)'? – 2010-11-19 23:02:08

+0

因为这看起来不起作用 - 警告:从不兼容的指针类型中传递'parse_commandline'的参数3 注意:期望的'struct items *'但参数的类型是'struct items **' – 2010-11-19 23:21:26

+0

'items'是一种数据类型,你只能修改一个实例,但你没有指定哪个实例。在你的示例代码中,'items'的唯一实例是'character_y',它在'main()'和'parse_commandline()'中都可见,所以除了可能是一个糟糕的设计之外,它并不能解释为什么你不能访问它。 – Clifford 2010-11-20 00:25:28

回答

1

做,这是一个指针传递给item S到parse_commandline功能,让功能更新基于结构的方式论证。

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中那样手动将它们传递给示例中的示例?我不知道这个问题是否有意义。 – 2010-11-19 23:33:35

0

将结构传递给C中的函数与传递任何其他变量没有区别。在你的情况,你应该参考做到这一点,这样就可以修改调用者的结构:

void parse_commandline(int argc, char *argv[], items *theItems)