不能声明一个 size=var 的字符串,即使 var 是 const

标签 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')
    {
        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 的值是多少。

要解决此问题,您有几种选择:

  1. 在 C99 模式下编译,这将允许在堆栈上分配可变长度数组。
  2. 使用 malloc()free() 在堆上分配内存。
  3. 根本不分配任何空间,就地进行交换。

就个人而言,我推荐选项 3。

关于不能声明一个 size=var 的字符串,即使 var 是 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22510040/

相关文章:

c++ - 将 Char 数组转换为 uint8_t vector

c - 在需要字符串文字的函数中接受 char。

c - 链接列表节点插入到前面 - 每次添加值时所有内容值都会改变

将 short 钳制为 unsigned char

c - 任意数量数字的平均值

java - 检查字符串中是否有整数?

c - LKM linux_dirent 实现

java - 使用不同的格式/模式解析迄今为止的字符串

java.util.NoSuchElementException 即使包含 hasMOreTokens

c++ - 在动态分配内存时使用指定大小