Мне нужно сделать машину adfgx (Code language from WWII) для проекта в школе. Но у меня проблемы.Выделить память для структуры в функции
Существует на структуру наряду с некоторыми функциями, определенными в adfgx.h, который выглядит следующим образом:
typedef struct {
char* alphabet;
char* symbols;
char* dictionary;
char* transposition;
} adfgx;
В adfgx.c мы включаем заголовок, и я должен написать функцию, которая выделяет память для этой структуры с предопределенной подписью:
/* Creates a new ADFGX machine */
adfgx* create_adfgx(const char* alphabet, const char* symbols, const char* dictionary, const char* transposition);
Так что я должен сделать здесь выделить память для структуры в этой функции. Я не понимаю, как я должен это делать, потому что теперь у меня нет размера алфавита, символов, словаря и транспозиции, так как теперь я могу обладать большой памятью, которую мне нужно выделить?
Любая конкретная причина предложить написать собственный вариант ['strdup()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/strdup.html) , не упоминая, что это то, предлагая? –
@JonathanLeffler Это почти наверняка учебное упражнение, и написать собственную версию 'strdup', вероятно, является ее центральным элементом. Если бы профессор хотел, чтобы они использовали 'strdup', OP, вероятно, никогда не задавал бы этот вопрос :-) – dasblinkenlight
Одна возможная интерпретация, да. Это не тот, который произошел со мной, но это далеко не невозможно. Другая возможная интерпретация заключается в том, что функция группирует свои аргументы в структуру для удобства; строки, на которые указывает, должны длиться до тех пор, пока код будет использовать структуру. Тогда все, что нужно, это скопировать указатели в выделенную структуру. В этом случае 'strdup()' вообще не требуется. Тем не менее, в среднем, более вероятно, что строки должны быть дублированы, но я не уверен, является ли 'strdup()' verboten. Я бы упомянул об этом - этих комментариев достаточно. –