LINUX.ORG.RU

А что можно было?

 ,


0

1

Господа это общеизвестная фича и просто я не в теме или это какое то нововведение?

// !@file  arr.c
#include <stdio.h>
#include <string.h>

/*void f(const char *str)
{

        char arr[strlen(str)];
        strcpy(arr, str);
        printf("%s\n", arr);
}*/

int main()
{
        char str[255];
        scanf("%s" , str);
        //f(str);
        char arr[strlen(str)];
        strcpy(arr, str);
        printf("%s\n", arr);
        return 0;
}

У меня сей код компилируеться и отрабатывает без ошибок. Как с закоментированными участками, так и без. Как gcc, так и g++.

 $ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

Собственно wtf?



Последнее исправление: cetjs2 (всего исправлений: 1)

Ну типа C99 несколько толерантнее относится к массивам переменной длины, а всё остальное фичи обычного C.

dn2010 ★★★★★
()

ты бы хоть стандарт смотрел, блин. Каждый месяц очередной нуб всплывает с подобным вопросом.

anonymous
()
Ответ на: комментарий от wota

man C++14

Вроде, в 14 это тоже не стали добавлять. Или уже передумали? Впрочем, GCC умеет, причём далеко не только для POD. И даже корректно отрабатывает создание/удаление. Но это всё нестандартно для плюсов :/

const86 ★★★★★
()
Ответ на: комментарий от vromanov

Ошибок так вообще-то больше будет. ;)

Во первых лучше fgets(str, sizeof(str), stdin) вместо scanf.

А во вторых, ты наверно имел в виду arr = strdup(str).

beastie ★★★★★
()

Лол, либо я кого то вдохновил, либо просто совпало :)

batbko
() автор топика
Ответ на: комментарий от beastie

strdup это другое. Это выделение памяти в куче, а тут на стеке.

vromanov ★★
()
Ответ на: комментарий от vvviperrr

Нет, не надо нам такого:

[..] only available when using the GNU GCC suite, and suffer from the same limitations described in alloca(3)
strdupa() and strndupa() are GNU extensions.
Не учи человека плохому.

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.