【发布时间】:2015-02-25 07:35:02
【问题描述】:
对不起,如果这个问题似乎是新手,我几天前就开始学习 C。
我有一个函数 (get_taken_values),它应该将一个字符串 (char[81) 作为输入并返回两个值:一个 int 和一个 int[9]。
正如我saw here,不可能返回多个值,所以我不得不使用结构。
这是我所拥有的:
#include <stdio.h>
#include <stdlib.h>
#define max_size 9
#define max_input 81
struct result {
int position;
int *taken;
};
struct result get_result(int pos, int take[]){
struct result res;
res.position = pos;
res.taken = take;
return res;
}
struct result get_taken_values(char string_arg[max_input]){
int position = 0;
int* chosen = calloc(max_size, sizeof(int)); //suggestion from a previous question
int someotherarray[9] = {1,2,3,4,5,6,7,8,9}; // fictional
int i;
for (i = 0; i < max_size; i ++) {
chosen[i] = someotherarray[i];
}
struct result res = struct result(position, chosen);
return res; // I to return int and int[9]: eg: 0,{1,2,3,4,5,6,7,8,9}
}
但我得到了:
ex16.c: In function 'get_taken_values':
ex16.c:127:22: error: expected expression before 'struct'
struct result res = struct result(position, chosen);
^
我尝试剪切 get_result,并在 get_taken_values 中创建结构:
// inside get_taken_values
struct result res;
res.position = position;
res.taken = chosen;
return res;
但它提出了这一点:
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
我打算将 get_taken_values 的返回值传递给 Python 并在那里使用它。
正确的做法是什么?
【问题讨论】:
-
struct result res = { position, chosen };。不过请注意参数顺序。 -
给出同样的错误
collect2.exe: error: ld returned 1 exit status -
链接器错误与您的问题无关;即使没有此代码,您也会得到它。它说你没有
WinMain功能。你呢? -
那么程序不完整。链接器在这里失败是非常正确的。如果你仔细解释你想要达到的目标,有人可能会为你解答。目前,您的问题显然不在于“返回结构”,返回 int 等时您将遇到相同的错误。
-
@RD445 它没有返回指向本地结构的指针,而是返回结构的副本。没事。我不知道python如何知道如何处理它,但这不是我以前使用的东西。有人应该在某个时候释放这段记忆。但这是一个单独的问题。