如何从 C 中的函数返回字符数组? [英] How can I return a character array from a function in C?

查看:54
本文介绍了如何从 C 中的函数返回字符数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这甚至可能吗?假设我想返回一个包含两个字符的数组

is that even possible? Let's say that I want to return an array of two characters

char arr[2];
arr[0] = 'c';
arr[1] = 'a';

来自一个函数.我什至使用什么类型的功能?我唯一的选择是使用指针并使函数无效吗?到目前为止,我已经尝试过使用 char* 函数或 char[].显然你只能有 char(*[]) 的功能.我想避免使用指针的唯一原因是函数在遇到返回内容"时必须结束;因为某物"的值是一个字符数组(不是字符串!),它可能会根据我通过主函数传递给函数的值改变大小.感谢任何提前回复的人.

from a function. What type do I even use for the function? Is my only choice to use pointers and void the function? So far I've tried having a char* function or a char[]. Apparently you can only have functions of char(*[]). The only reason I want to avoid using pointers is the fact that the function has to end when it encounters a "return something;" because the value of "something" is a character array (not a string!) that might change size depending on the values I pass into the function through the main function. Thanks to anyone who responds in advance.

推荐答案

您有几个选择:

1) 使用 malloc() 上分配数组,并返回指向它的指针.您还需要自己跟踪长度:

1) Allocate your array on the heap using malloc(), and return a pointer to it. You'll also need to keep track of the length yourself:

void give_me_some_chars(char **arr, size_t *arr_len)
{
    /* This function knows the array will be of length 2 */
    char *result = malloc(2);

    if (result) {
        result[0] = 'c';
        result[1] = 'a';
    }

    /* Set output parameters */
    *arr = result;
    *arr_len = 2;
}

void test(void)
{
    char *ar;
    size_t ar_len;
    int i;

    give_me_some_chars(&ar, &ar_len);

    if (ar) {
        printf("Array:\n");
        for (i=0; i<ar_len; i++) {
            printf(" [%d] = %c\n", i, ar[i]);
        }
        free(ar);
    }
}

2)调用者上为数组分配空间,并让被调用的函数填充它:

2) Allocate space for the array on the stack of the caller, and let the called function populate it:

#define ARRAY_LEN(x)    (sizeof(x) / sizeof(x[0]))

/* Returns the number of items populated, or -1 if not enough space */
int give_me_some_chars(char *arr, int arr_len)
{
    if (arr_len < 2)
        return -1;

    arr[0] = 'c';
    arr[1] = 'a';

    return 2;
}

void test(void)
{
    char ar[2];
    int num_items;

    num_items = give_me_some_chars(ar, ARRAY_LEN(ar));

    printf("Array:\n");
    for (i=0; i<num_items; i++) {
        printf(" [%d] = %c\n", i, ar[i]);
    }
}

不要尝试这样做

char* bad_bad_bad_bad(void)
{
    char result[2];      /* This is allocated on the stack of this function
                            and is no longer valid after this function returns */

    result[0] = 'c';
    result[1] = 'a';

    return result;    /* BAD! */
}

void test(void)
{
    char *arr = bad_bad_bad_bad();

    /* arr is an invalid pointer! */
}

这篇关于如何从 C 中的函数返回字符数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆