Can';t声明size=var的字符串,即使var是const
几周后我又要开始上学了,我正在努力练习。 我想做一个函数,它接受一个单词并将其向后翻转(word->drow) 我当然需要知道单词的长度。我使用另一个函数来确定它的大小。不想使用任何内置函数 这是确定单词长度的函数:Can';t声明size=var的字符串,即使var是const,c,string,char,constants,C,String,Char,Constants,几周后我又要开始上学了,我正在努力练习。 我想做一个函数,它接受一个单词并将其向后翻转(word->drow) 我当然需要知道单词的长度。我使用另一个函数来确定它的大小。不想使用任何内置函数 这是确定单词长度的函数: int largopal(char * palabra) //Devuelve la cantidad de caracteres de la palabra { int counter = 0; while (palabra[counter] != '\0'
int largopal(char * palabra) //Devuelve la cantidad de caracteres de la palabra
{
int counter = 0;
while (palabra[counter] != '\0')
{
counter++;
}
return counter;
}
这是一个使单词倒转的函数:
void darvuelta(char *pal){
int c = 0, i;
const int l = largopal(pal);
char t[l];
for (i = 0; i < l; i++){
}
}
void darvuelta(char*pal){
int c=0,i;
常数int l=largopal(pal);
字符t[l];
对于(i=0;i
在继续我的for
之前,我需要知道为什么编译器要求我在chart[l]
中给出一个“常量表达式”并修复它
我使用的是Visual Studio 2012,文件扩展名是c
,项目是作为win32控制台应用程序创建的,我使用的是Win7 enterprise,如果需要更多信息,请告诉我。这里提出的第一个问题
提前谢谢
Dimas.您似乎没有在C99模式下编译代码。C99和更高版本中允许使用可变长度数组。使用选项
std=c99
编译程序另一个问题是编译时不知道
l
。似乎您没有在C99模式下编译代码。C99和更高版本中允许使用可变长度数组。使用选项std=c99
编译程序另一个问题是编译时不知道
l
。这是错误代码:
const int l = largopal(pal);
char t[l];
这是一个可变长度数组,因为编译器在编译时不知道l
的值是什么
要解决此问题,您有几个选项:
malloc()
和free()
在堆上分配内存就个人而言,我建议选择3。这是错误代码:
const int l = largopal(pal);
char t[l];
这是一个可变长度数组,因为编译器在编译时不知道l
的值是什么
要解决此问题,您有几个选项:
malloc()
和free()
在堆上分配内存就个人而言,我推荐选项3。我不想要可变长度数组,我想要固定长度数组。这就是为什么我要声明
const int l=largopal(pal)代码>。我做错了吗?它是变量-const
并没有使它成为编译时常量。事实上,常量值甚至可以更改,尽管这相当棘手。所以,任何不是编译时常量的东西都是可变的。我不想要可变长度的数组,我想要固定长度的数组。这就是为什么我要声明const int l=largopal(pal)代码>。我做错了吗?它是变量-const
并没有使它成为编译时常量。事实上,常量值甚至可以更改,尽管这相当棘手。所以,任何不是编译时常量的东西都是变量。所以你的意思是,使用temp char var而不是temp数组。。。有道理。我会试试看,但不管怎样:我见过类似的问题,回答是“将你的intx
声明为constintx
,它会起作用”,OP说“谢谢,它起作用了”。为什么这对我不起作用…?看起来VisualStudio不支持C99的这个特性(他们只实现了C99的一小部分)。大多数linux编译器都包含此功能,这可能是您从中听到的。@user3438194:如果在堆栈上执行此操作,则定义为可变长度数组。否则,您可以使用malloc()
和free()
在堆上分配它<代码>字符*t=malloc(l)代码> @ USSR338 194:引用上面的链接:C++不是C,代码> < <代码>仍然是VLA。所以,你的意思是,使用临时字符var代替临时数组…有道理。我会试试看,但不管怎样:我见过类似的问题,回答是“将你的intx
声明为constintx
,它会起作用”,OP说“谢谢,它起作用了”。为什么这对我不起作用…?看起来VisualStudio不支持C99的这个特性(他们只实现了C99的一小部分)。大多数linux编译器都包含此功能,这可能是您从中听到的。@user3438194:如果在堆栈上执行此操作,则定义为可变长度数组。否则,您可以使用malloc()
和free()
在堆上分配它<代码>字符*t=malloc(l)代码> @ USER338 194:参考上面的链接:C++,而不是代码。A/<代码>仍然是VLA.注意到,尽管听起来类似,关键字“const”与“常量表达式”完全不同,但是,尽管它听起来类似,但是关键字“const”与“常量表达式”完全不同。