你有几个选项:
1) 使用malloc()
在堆上分配你的数组,并返回指向它的指针。你还需要自己跟踪长度:
void give_me_some_chars(char **arr, size_t *arr_len)
{
char *result = malloc(2);
if (result) {
result[0] = 'c';
result[1] = 'a';
}
*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) 在调用者的堆栈上分配数组空间,然后让被调用的函数填充它:
#define ARRAY_LEN(x) (sizeof(x) / sizeof(x[0]))
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];
result[0] = 'c';
result[1] = 'a';
return result;
}
void test(void)
{
char *arr = bad_bad_bad_bad();
}