Массив нулевой длины

51
задан Ben Voigt 20 May 2014 в 19:05
поделиться

3 ответа

Да это - Щелканье.
Для создания массива любой длины:

struct someData* mallocSomeData(int size)
{
    struct someData*  result = (struct someData*)malloc(sizeof(struct someData) + size * sizeof(BYTE));
    if (result)
    {    result->nData = size;
    }
    return result;
}

Теперь у Вас есть объект someData с массивом указанной длины.

34
ответ дан Community 7 November 2019 в 10:10
поделиться

Существуют, к сожалению, несколько причин, почему Вы объявили бы нулевой массив длины в конце структуры. Это по существу дает Вам способность возвратить структуру переменной длины из API.

Raymond Chen сделал превосходное сообщение в блоге на предмете. Я предлагаю, чтобы Вы смотрели на это сообщение, потому что оно, вероятно, содержит ответ, который Вы хотите.

Примечание в его сообщении, это имеет дело с массивами размера 1 вместо 0. <забастовка> Дело обстоит так, потому что нулевые массивы длины являются более свежей записью в стандарты. Его сообщение должен все еще относиться к Вашей проблеме.

http://blogs.msdn.com/oldnewthing/archive/2004/08/26/220873.aspx

РЕДАКТИРОВАНИЕ

Примечание: Даже при том, что в сообщении Raymond говорится, что 0 массивов длины законны в C99, они все еще не на самом деле законны в C99. Вместо 0 массивов длины здесь необходимо использовать длину 1 массив

25
ответ дан JaredPar 7 November 2019 в 10:10
поделиться

Это - старый взлом C для разрешения гибких размерных массивов.

В стандарте C99 это не необходимо, поскольку он поддерживает прибытие [] синтаксис.

22
ответ дан arul 7 November 2019 в 10:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: