函数声明错误 - 返回指针数组

时间:2013-07-04 20:55:45

标签: c++ arrays function pointers return

这是retstr。

的函数声明语句的错误

“prog.cpp:5:错误:在'''标记之前预期的unqualified-id prog.cpp:5:错误:在'['token“

之前的预期初始值设定项

以下是代码:

#include<stdio.h>
#include<math.h>
int n;
char *[] retstr(int k)
{
        char* ans[10];
        return(ans);
}

4 个答案:

答案 0 :(得分:3)

首先,如果你想声明一个返回10个char *指针的原始数组的函数,那么正确的语法就是

char *retstr(int k)[10]
{
  char* ans[10];
  return ans;
}

但是,这没有解决任何问题,因为C和C ++函数都不允许直接返回数组。因此,即使使用正确的语法,直接尝试返回原始数组也不起作用。

从其他答案中已建议的方法中选择不同的方法。

答案 1 :(得分:1)

char *[]不是一种类型。这是一个语法错误。您可能想要的是

char **function()
{
}

但是,再次,您将返回一个自动数组,它将调用未定义的行为。为什么不让你的函数填充字符串向量呢?

void function(std::vector<std::string> &v)
{
    v.push_back("foo");
    v.push_back("bar");
}

答案 2 :(得分:0)

  1. 在C ++中不能返回数组。

  2. 你的函数实际上返回一个指向ans的第一个元素的指针,这也是坏消息,因为该数组在堆栈上声明并超出范围函数返回后。

  3. 正确的做法是从C ++标准库中选择适当的数据结构并使用它。如果出于某种原因你设置了基本类型,你需要提出一个不同的解决方案 - 例如,可以在函数内动态分配数组并返回一个指向它的指针。例如。

答案 3 :(得分:0)

试试这个:

#include<stdio.h>
#include<math.h>
int n;
char ** retstr(int k)
{
    char** ans = (char**) malloc(10 * sizeof(char*));
    return ans;
}