如何将结构从一个函数传递到另一个函数?将结构数组传递给函数
typedef char word_t[MAX_WORD_LEN+1];
typedef struct {
int nwrds;
word_t words[MAX_PARA_LEN];
} para_t;
int
main() {
para_t onepara;
while (get_paragraph(onepara, MAX_PARA_LEN) != EOF) {
put_paragraph(onepara, MAX_SNIPPET_LEN);
}
end_output();
return 0;
}
int
get_paragraph(para_t p, int limit) {
int d, i;
word_t w;
for (i=0;i<limit;i++) {
if ((d=get_word(w, MAX_WORD_LEN))==EOF) {
return EOF;
} else if(d==WORD_FND) {
strcpy(p.words[i], w);
} else if (d==PARA_END) {
new_paragraph();
break;
}
}
return PARA_FND;
}
void
put_paragraph(para_t p, int limit) {
int i;
for (i=0;i<limit; i++) {
printf("%s\n", p.words[i]);
}
}
我用的strcpy这个词“W”复制到阵列中的结构“P”(在get_paragraph),但是当我去打印出的结构,我有麻烦的任何输出。 目前put_paragraph输出没有字符串,但我不明白为什么。
get_paragraph中的get_word函数能够正确识别一个单词,并且我没有包含它以节省空间。
-1你改变了这个问题。如果结构的成员确实是一个指针,那么是的,你*可以*传递一个结构本身的副本,因为指针的副本将被传递,并且被复制的指针将指向与原始地址相同的地址。但是,由于“单词”是一个数组,所以你不能;如果函数需要修改所述数组,则必须传递指向该结构的指针。 –
@EdS。不对。您也可以通过任何类型的结构与数组成员进行通信:http://ideone.com/exSPn。顺便说一句,我已经包括了一个在我的答案中通过引用传递结构的例子。 –
您只需返回原始参数的修改副本。你自己的例子表明我其实是正确的;该参数没有修改,只有一个副本。 OP正在对'get_paragraph'的参数执行一个'strcpy',并期待它被修改。我不是说你最初的例子是*错误*,我只是说它没有解决OP有问题 –