将函数字符串数组传递给main函数(C代码)

时间:2013-06-16 15:28:52

标签: c function return

My C xmlretrive函数(thisurl,thisxpath)使用cURL从给定的URL检索XML,并将获得的chunk.memory发送到libxml2解析器,该解析器使用xpath浏览所有节点并匹配thisxpath表达式(基本上从某些节点属性返回一些文本) 。 这很困难(我是一名初学者程序员),但是经过几天的工作,在这个论坛上的一些搜索和堆栈社区的一些帮助我得到了我的代码。令人惊讶......但是......但是现在我正面临着我的最后一个问题(我真的认为这会更容易)。

我的数据在xmlretrive中,好的,但是如何将该信息传递回main函数? 用结果填充一个字符串数组然后从main(和最后一个释放内存)访问该数组是一个很好的行为?我怎么能做到这一点?或者还有其他“标准/安全”程序吗?我已经读过,不可能“返回”一个数组。一些帮助将非常感激,因为实际上我只能在屏幕上打印结果(当然在xmlretrive函数内):\

最佳, 乔瓦尼。

int main(void)  {
char thisxpath[200];
char thisurl[200];
strcpy (thisurl,"http://api.openweathermap.org/data/2.5/forecast/daily?q=Pescara&mode=xml&units=metric&cnt=3");
strcpy (thisxpath,"//time/@day | //symbol/@name | //windSpeed/@name | //temperature/@*[name()='day' or name()='min']");
xmlretrive (thisurl, thisxpath);
return 0;
}

void xmlretrive(char* myurl, char* myxpath) {
//code, code, a lot of code
for (i=0; i < nodeset->nodeNr; i++) {
    keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);

    printf("keyword: %s\n", keyword);

    // Need to get keyword values back to main//        



xmlFree(keyword);}
//code
}

2 个答案:

答案 0 :(得分:0)

keywords复制到链接列表并将其返回到main。这样您就可以在main中迭代并打印它们。

此外,您不必事先知道关键字列表的大小。确保复制关键字字符串libxml返回到链表节点并xmlFree释放它以避免内存管理问题。

答案 1 :(得分:0)

使用指针。像这样:

    int main(void)  {
char thisxpath[200];
char thisurl[200];
strcpy (thisurl,"http://api.openweathermap.org/data/2.5/forecast/daily?q=Pescara&mode=xml&units=metric&cnt=3");
strcpy (thisxpath,"//time/@day | //symbol/@name | //windSpeed/@name | //temperature/@*    [name()='day' or name()='min']");
char** plop = NULL;
xmlretrive (thisurl, thisxpath, &plop);
return 0;
}

void xmlretrive(char* myurl, char* myxpath, char*** plop) {
//code, code, a lot of code
for (i=0; i < nodeset->nodeNr; i++) {
    keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1);

    printf("keyword: %s\n", keyword);  
    /* Malloc plop and initialize it as you want*/


xmlFree(keyword);}
//code
}

它有点难看,但它比全局变量更好。