Выделение памяти под структуру - C (СИ) (76756)
Формулировка задачи:
Здравствуйте! Задача - написать модуль для работы со строками. Структуру менять нельзя, можно редактировать только функции. Я закосячил при выделении памяти, только вот как - не пойму...
Для одной строки всё работает, но вот для двух - не желает
Вот код main:
Помогите, пожалуйста)
#include <malloc.h>
#include <string.h>
#include <stdio.h>
//const ...; // Определение исключительных ситуаций
typedef struct
{
char *s; // Указатель на строку
unsigned max; /* Максимальное количество символов в строке, определяющееся при инициализации*/
unsigned N; // Динамическая (текущая) длина строки
} str;
typedef str *string1;
void InitStr(string1 st, unsigned n)
{
st=(string1)malloc(sizeof(str));
st->s=(char*)malloc(n);
st->max=n;
st->N=0;
}
void InputStr(string1 st)
{
unsigned i=0;
char c;
c=getchar();
while (c!=10)
{
puts("TYT");
st->s[i++]=c; // ошибка здесь
puts("AGA");
c=getchar();
}
st->N=i;
}
void OutputStr(string1 st)
{
unsigned i;
for (i=0;i<st->N;++i)
putchar(st->s[i]);
putchar('\n');
}
void DoneStr(string1 s)
{
//free(s->s); Предполагается, но не работает :{
free(s);
}#include <stdio.h>
#include <stdlib.h>
#include "format5.h"
#define N 255
int main()
{
string1 s,Subs;
InitStr(s,N);
InitStr(Subs,N);
puts("POH");
InputStr(s);
puts("HOP");
//Copy(s,3,5,Subs);
//Delete(s,3,5);
//OutputStr(s);
//Insert(Subs,s,3);
//OutputStr(s);
DoneStr(Subs);
DoneStr(s);
return 0;
}Решение задачи: «Выделение памяти под структуру»
textual
Листинг программы
int main() {
//...
str st;
InitStr(&st);
//...
}
Объяснение кода листинга программы
- В функции main() выполняется следующее действие:
- Создается переменная типа int с именем st, которая будет использоваться для хранения структуры str.
- Инициализируется функция InitStr(), которая будет использоваться для инициализации структуры str.
- Далее в функции main() выполняется действие:
- Вызывается функция InitStr() с передачей переменной st в качестве аргумента.
- Эта функция инициализирует структуру str, выделяя память под ее поля.
- После выполнения функции InitStr() переменная st будет содержать инициализированную структуру str, и можно приступать к ее использованию в программе.
- В данном коде нет других действий, которые могут быть выполнены в функции main().