很抱歉,如果这个问题看起来像新手,我几天前就开始学习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并在那里使用它。
这样做的正确方法是什么?
答案 0 :(得分:2)
就这样做
#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]){
struct result res;
res.position = 0;
res.taken = malloc(max_size * sizeof(int)); // you don't need to
// initialize the values
// you will do it below
if (res.taken == NULL) // always check the success of malloc
return res;
int someotherarray[9] = {1,2,3,4,5,6,7,8,9}; // fictional
int i;
for (i = 0; i < max_size; i ++) {
res.taken[i] = someotherarray[i];
}
return res; // I to return int and int[9]: eg: 0,{1,2,3,4,5,6,7,8,9}
}
你必须记得在某个时候致电free(res.taken)
。
答案 1 :(得分:1)
您应该在代码中纠正一些事项:
在struct result get_taken_values(char string_arg[max_input])
不需要&#39; max_input&#39;。你可以声明&#39;(char string_arg [])&#39;意思是你要传递一个指向char类型的函数。
在int* chosen = calloc(max_size, sizeof(int));
您稍后将对数组进行初始化,因此无需使用calloc
,您可以使用malloc
。
始终检查malloc是否不返回NULL。
这是你写它的方式
int* chosen = malloc(max_size * sizeof(int));
if (chosen == NULL) {
return res;
}
最后,您无法使用struct result res = struct result(position, chosen);
这是你需要做的:
struct result get_taken_values(char string_arg[max_input])
{
struct result res;
int* chosen = malloc(max_size * sizeof(int));
if (chosen == NULL) {
return res;
}
res.taken = chosen;
res.position = 0;
int someotherarray[9] = {1,2,3,4,5,6,7,8,9};
int i;
for (i = 0; i < max_size; i ++) {
res.taken[i] = someotherarray[i];
}
return res;
}