我的编译行:
gcc -Wextra -Wall -Wvla -std=c99 StringChange.c -o StringChange
我的节目:
#include <stdio.h>
#define MAX_STRING_LENGTH 51
char switchChar(char c)
{
if((c>='A')&&(c<='Z'))
{
c = c + 32;
}
if((c >='a')&&(c<='z'))
{
c = c - 32;
}
if(c>'5')
{
c = 56;
}
if (c<'5')
{
c = 48;
}
return c;
}
int main(void)
{
char temp;
int i=0,j=0;
char stringInput[MAX_STRING_LENGTH];
printf("Please enter a valid string\n");
scanf("%s",stringInput);
while(stringInput[i]!='\0')
{
i++;
}
char newString[i];
for(j = 0;j<i;j++)
{
temp = switchChar(stringInput[j]);
newString[j] = temp;
}
printf("\"%s\"", stringInput);
printf("->");
printf( "\"%s\"",newString);
return 0;
}
编译时我不断收到错误'ISO C90禁止变长数组newString',即使我在命令行中使用C99进行编译(其他stackexchange问题中的解决方案)。
非常感谢您的帮助和任何其他评论。 谢谢
答案 0 :(得分:3)
-Wvla
选项提供该诊断。来自gcc documentation:
-Wvla
如果代码中使用了可变长度数组,则发出警告。 -Wno-vla防止变长数组的-Wpedantic警告。
显然错误信息有点误导。但它主要用于旧代码(在C99之前)到VLA使用,其中支持VLA作为扩展。由于您是在C99模式下编译,因此只需从命令行选项中删除-Wvla
。