如何从函数返回一个字符串数组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)
char * myFunction () {

    char sub_str[10][20]; 
    return sub_str;

} 

void main () {

    char *str;
    str = myFunction();

}

error:return from incompatible pointer type

怎么解决?

提问于
用户回答回答于

C中的字符串数组可以与char**或与之一起使用char*[]。但是,不能像函数中那样返回堆栈中存储的值。如果你想返回字符串数组,你必须动态保留它:

char ** sub_str = malloc(10 * sizeof(char*));
for (int i =0 ; i < 10; ++i)
    sub_str[i] = malloc(20 * sizeof(char));
/* Fill the sub_str strings */
return sub_str;

然后,main可以像这样获取字符串数组:

char** str = myFunction();
printf("%s", str[0]); /* Prints the first string. */
用户回答回答于

考虑:

char **get_me_some_strings() {
  char *ary[] = {"ABC", "BCD", NULL};
  return ary;
}

编译器会正确地发出一个关于尝试返回本地变量地址的投诉,并且在尝试使用返回的指针时肯定会遇到分段错误。

char **get_me_some_strings() {
  char *ary[] = {"ABC", "BCD", NULL};
  char **strings = ary;
  return strings;
}

将会关闭编译器,同时仍然会遇到同样令人讨厌的分段错误。

你可做:

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

char **get_me_some_strings() {
  char *ary[] = { "ABC", "BCD", NULL };
  char **strings = ary; // a pointer to a pointer, for easy iteration
  char **to_be_returned = malloc(sizeof(char*) * 3);
  int i = 0;
  while(*strings) {
    to_be_returned[i] = malloc( sizeof(char) * strlen( *strings ) );
    strcpy( to_be_returned[i++], *strings);
    strings++;
  }
  return to_be_returned;
}

现在使用它:

void i_need_me_some_strings() {
  char **strings = get_me_some_strings();
  while(*strings) {
    printf("a fine string that says: %s", *strings);
    strings++;
  }
}

所属标签

可能回答问题的人

  • gulu丶咕噜

    0 粉丝1 提问5 回答
  • EatRice

    16 粉丝0 提问4 回答
  • 华讯云

    0 粉丝0 提问4 回答
  • 卓脑域名

    0 粉丝0 提问3 回答

扫码关注云+社区

领取腾讯云代金券