即使var为const,也无法声明size = var的字符串

时间:2014-03-19 15:06:19

标签: c string char const

我几周后又开始上学了,我试着练习一下。 我想创建一个单词并向后翻转的函数(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之前,我需要知道为什么编译器要求我给出&#34;一个常量表达式&#34;在char t[l]并修复它。

我使用Visual Studio 2012,文件扩展名为c,项目创建为win32控制台应用程序,我使用的是Win7企业,如果您需要更多信息请告诉我。这里提出第一个问题。

提前致谢。

迪马斯。

2 个答案:

答案 0 :(得分:4)

这是错误的代码:

const int l = largopal(pal);
char t[l];

这是一个可变长度数组,因为编译器在编译时不知道l的值是什么。

要解决此问题,您可以选择以下几种方法:

  1. 在C99模式下编译,这将在堆栈上分配可变长度数组。
  2. 使用malloc()free()
  3. 在堆上分配内存
  4. 根本不分配任何空间,并就地进行交换。
  5. 就个人而言,我建议选择3。

答案 1 :(得分:2)

您似乎没有在C99模式下编译代码。 C99和后者允许使用可变长度数组。使用选项std=c99编译您的程序 另一个问题是在编译时不知道l