这是 retstr 的函数声明语句的错误。
“prog.cpp:5: 错误: '[' 标记之前的预期 unqualified-id prog.cpp:5: 错误: '[' 标记之前的预期初始化程序”
这是代码:
#include<stdio.h>
#include<math.h>
int n;
char *[] retstr(int k)
{
char* ans[10];
return(ans);
}
首先,如果你想声明一个返回 10 个char *
指针的原始数组的函数,正确的语法应该是
char *retstr(int k)[10]
{
char* ans[10];
return ans;
}
然而,这并没有解决任何问题,因为在 C 和 C++ 中的函数都不允许直接返回数组。因此,即使使用正确的语法,直接尝试返回原始数组也是行不通的。
从其他答案中已经建议的方法中选择一种不同的方法。
char *[]
不是类型。这是一个语法错误。你可能想要的是
char **function()
{
}
但是,再次,您将返回一个自动数组,该数组将调用未定义的行为。为什么不让你的函数填充一个字符串向量呢?
void function(std::vector<std::string> &v)
{
v.push_back("foo");
v.push_back("bar");
}
在 C++ 中无法返回数组。
您的函数实际上返回指向 的第一个元素的指针ans
,这也是个坏消息,因为该数组已在堆栈上声明,并且在函数返回后立即超出范围。
正确的做法是从 C++ 标准库中选择合适的数据结构并使用它。如果由于某种原因您设置了基本类型,则需要提出不同的解决方案 - 例如,可能在函数内部动态分配数组并返回指向它的指针。
尝试这个:
#include<stdio.h>
#include<math.h>
int n;
char ** retstr(int k)
{
char** ans = (char**) malloc(10 * sizeof(char*));
return ans;
}