如何在C中返回一个字符串数组?

7 c arrays string pointers function

例如,我在主文件中

1) char ** array[NUMBER];
2) array = build_array();
Run Code Online (Sandbox Code Playgroud)

并在导入的文件中

char ** build_array()
{
  char ** array[NUMBER];
  strings[0] = "A";
  strings[1] = "B";
  return (char *) strings;
}
Run Code Online (Sandbox Code Playgroud)

但是,在主文件的第2行,我收到错误: "incompatible types when assigning to type 'char **[(unsighed int)NUMBER]' from type 'char **'

我究竟做错了什么?任何建议或意见将不胜感激.先感谢您.

K-b*_*llo 11

关于C中的字符串是什么似乎有些混淆.在C中,chars 的空终止序列被认为是字符串.它通常由...表示char*.

我只想调用该build_array()函数并返回字符串数组

你几乎不能返回一个数组,也不能返回一个指向本地数组的指针.但是,您可以将数组build_array作为参数传递给它size,并将其作为参数传递.

void build_array( char* strings[], size_t size )
{
  // make sure size >= 2 here, based on your actual logic
  strings[0] = "A";
  strings[1] = "B";
}
...later called as:...
char *array[NUMBER];
build_array(array, NUMBER);
Run Code Online (Sandbox Code Playgroud)

替代方法是返回指向全局或静态分配数组的指针,这将使您的函数不可重入.你现在可能不关心这个,但这是不好的做法所以我建议你避免走那条路.


pau*_*sm4 5

正如littleadv指出的那样,您的代码存在一些问题:

  • char **和之间不匹配char **[ ]

  • 返回指向局部变量的指针

  • 等等。

该示例可能会有所帮助:

#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define NUMBER 2
#define MAX_STRING 80

char **
build_array ()
{
  int i = 0;
  char **array = malloc (sizeof (char *) * NUMBER);
  if (!array)
    return NULL;
  for (i = 0; i < NUMBER; i++) {
    array[i] = malloc (MAX_STRING + 1);
    if (!array[i]) {
      free (array);
      return NULL;
    }
  }
  strncpy (array[0], "ABC", MAX_STRING);
  strncpy (array[1], "123", MAX_STRING);
  return array;
}

int
main (int argc, char *argv[])
{
  char **my_array = build_array ();
  if (!my_array) {
    printf ("ERROR: Unable to allocate my_array!\n");
    return 1;
  }
  else {
    printf ("my_array[0]=%s, my_array[1]=%s.\n",
      my_array[0], my_array[1]);
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)