c - 返回结构

标签 c struct return

对不起,如果这个问题看起来像新手,我几天前开始学习 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 并在那里使用它。

正确的做法是什么?

最佳答案

就这样

#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)

关于c - 返回结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27683391/

相关文章:

c - GDB 不从库中加载符号

c - 错误 C2016 : C requires that a struct or union has at least one member from struct

c - 以色带为输入计算电阻值

c - 在 C 中使用 cmd 替换文件的单词时出现问题

c - 删除文件结尾

c - 对我的一些函数的 undefined reference

c - 我删除结构条目的代码没有删除,我不明白为什么

c - 在C中的while循环内部和外部返回一个值

python - 从函数列表中返回项目。 Python

c - 在 C 中添加二维矩阵