函数如何返回指向字符串数组的指针?
我必须不使用C的string.h
库来执行此操作。这是我到目前为止的内容:
#include <stdio.h>
#include <stdlib.h>
char* myFunc(){
char* result[2];
// the strings are originally dynamically allocated with some
// function parameters which i've omitted to simplifiy the question.
result[0] = "abc";
result[1] = "def";
return result;
}
int main(void){
char* result = myFunc();
printf("%s\n%s\n", result[0], result[1]);
return 0;
}
我希望有两个字符串,但是编译器会返回以下内容:
error: return from incompatible pointer type [-Wincompatible-pointer-types]
return result;
答案 0 :(得分:5)
您的类型不匹配。
您的函数已定义为返回char *
,但是您返回的char *[]
会衰减为char **
。这就是警告的意思。
将返回类型以及您为其分配返回值的值更改为char **
。另外,您无法返回指向局部变量的指针,因此您需要按照代码注释中的说明动态分配数组。
#include <stdio.h>
#include <stdlib.h>
char **myFunc(){
char **result = malloc(2 * sizeof(*result));
result[0] = "abc";
result[1] = "def";
return result;
}
int main(void){
char **result = myFunc();
printf("%s\n%s\n", result[0], result[1]);
return 0;
}
答案 1 :(得分:2)
char** result = myFunc();
但是函数中的yout变量是自动的,并且在函数范围之外不存在
char** myFunc(){
char** result = malloc(2 * sizeof(*result));
result[0] = something;
result[1] = something_else;
return result;
}