Выделение памяти для Структуры в C

url ='http://www.test.com/page/TEST2'.split('/')[4]
print url

Выход: TEST2.

28
задан Blackbinary 1 February 2010 в 14:38
поделиться

7 ответов

Мой любимый:

#include <stdlib.h>

struct st *x = malloc(sizeof *x); 

Обратите внимание, что:

  • x должен быть указателем
  • не требуется приведение
  • включите соответствующий заголовок
64
ответ дан dirkgently 14 October 2019 в 09:53
поделиться

struct st* x = malloc( sizeof( struct st ));

4
ответ дан Nikolai Fetissov 14 October 2019 в 09:53
поделиться

Полагаю, когда вы вызываете sizeof для типа struct, C рекурсивно вызывает sizeof для полей struct. Таким образом, struct st *x = malloc(sizeof(struct st)); действительно работает, только если struct st имеет фиксированный размер. Это важно только в том случае, если в вашей структуре есть что-то вроде строки переменного размера, и вы НЕ хотите каждый раз указывать максимальную длину.

В общем,

struct st *x = malloc(sizeof(struct st));

работает. Иногда вы можете столкнуться с структурами переменного размера или «абстрактными» структурами (например, абстрактный класс из Java), и компилятор скажет вам, что он не может определить размер struct st. В этих случаях либо вам придется вычислять размер вручную и вызывать malloc с номером, либо вы найдете функцию, которая возвращает полностью реализованную и malloc-версию нужной вам структуры.

-1
ответ дан Ritwik Bose 14 October 2019 в 09:53
поделиться

Вы не совсем делаете это правильно. struct st x - это структура, а не указатель. Это хорошо, если вы хотите выделить один на стеке. Для распределения на кучу, strust st * x = malloc (sizeof (struct st)); .

6
ответ дан 28 November 2019 в 00:57
поделиться

struct st * x = (str st st *) malloc (sizeof (struct st));

1
ответ дан 28 November 2019 в 00:57
поделиться

Это точно возможно - и это правильный способ

Предположим, вы имели в виду набрать

struct st *x = malloc(sizeof(struct st)); 

ps. Вы должны сделать sizeof(struct), даже если знаете размер всего содержимого, потому что компилятор может разбивать структуру так, чтобы мембраны были выровнены.

struct tm {
  int x;
  char y;
}

может иметь размер, отличный от

struct tm {
  char y;
  int x;
}
3
ответ дан 28 November 2019 в 00:57
поделиться

Это должно сделать:

struct st *x = malloc(sizeof *x); 
2
ответ дан 28 November 2019 в 00:57
поделиться
Другие вопросы по тегам:

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