Нет, этот код имеет синтаксические ошибки. Звездочка идет после имя типа, чтобы сформировать указатель на этот тип. Так что:
char*
нет:
*char
Это странно, что у вас есть это право на примере "C-стиле" с использованием malloc()
, но не в C++.
Как многие комментаторы любезно отметили, есть и другие проблемы с malloc()
и его использованием sizeof
. Но, по крайней мере, он получил название типа. Лично я против повторения имен типов в malloc()
вызовов, если это вообще возможно, поэтому я хотел бы написать эту версию, как это, чтобы выделить динамический массив указателей 20 символов:
char **x;
x = malloc(20 * sizeof *x);
Этот путь:
- Следует читать как «в 20 раз больше, чем
x
баллов», то есть в 20 раз больше, чем один указатель char *
.
- Содержит магическую константу 20 только в одном месте.
- Не повторяйте какую-либо часть типа, если бы вы перешли на
wchar_t **x
, это все равно будет работать, а не случайно.
- Написано на C, так как я чувствовал, что это более естественно при обсуждении
malloc()
. В C++ вам нужно указать возвращаемое значение. В C вы никогда не должны этого делать.
Вы лучший парсер, чем я! – xtofl
Хотя он не использует его полностью правильно, потому что он создает массив из 20 символов char * s не 20 char ** s. Не то, чтобы 2 были разных размеров или чего-то еще. – Goz
@unwind Мой плохой. Я просто забыл, что написал (char *) вместо (* char).
@Goz Я не понял, что ты хотел сказать. Здесь x [i] будет указывать на (char *) poniters, каждая из которых является переменной длиной строки. Надеюсь, моя декларация верна. – AppleGrew