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