几周后我又要开学了,我正在尝试练习一下。 我想制作一个接受单词并将其倒转的函数(word -> drow)。
我当然需要知道单词的长度。我使用另一个函数来确定它的大小。不想使用任何内置函数。
这是决定单词长度的函数:
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++){
}
}
在继续我的 for
之前,我需要知道为什么编译器要求我在 char t[l]
中给出“常量表达式”并修复它.
我使用的是 Visual Studio 2012,文件扩展名为 c
,该项目是作为 win32 控制台应用程序创建的,我使用的是 Win7 企业版,如果您需要更多信息,请告诉我。第一个问题在这里提出。
提前致谢。
迪马斯。
最佳答案
这是错误的代码:
const int l = largopal(pal);
char t[l];
这是一个变长数组,因为编译器在编译时不知道 l
的值是多少。
要解决此问题,您有几种选择:
- 在 C99 模式下编译,这将允许在堆栈上分配可变长度数组。
- 使用
malloc()
和free()
在堆上分配内存。 - 根本不分配任何空间,就地进行交换。
就个人而言,我推荐选项 3。
关于不能声明一个 size=var 的字符串,即使 var 是 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22510040/