Выделение памяти под структуру - C (СИ) (76756)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Задача - написать модуль для работы со строками. Структуру менять нельзя, можно редактировать только функции. Я закосячил при выделении памяти, только вот как - не пойму...
#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);
}
Для одной строки всё работает, но вот для двух - не желает Вот код main:
#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);
//...
}

Объяснение кода листинга программы

  1. В функции main() выполняется следующее действие:
    • Создается переменная типа int с именем st, которая будет использоваться для хранения структуры str.
    • Инициализируется функция InitStr(), которая будет использоваться для инициализации структуры str.
  2. Далее в функции main() выполняется действие:
    • Вызывается функция InitStr() с передачей переменной st в качестве аргумента.
    • Эта функция инициализирует структуру str, выделяя память под ее поля.
  3. После выполнения функции InitStr() переменная st будет содержать инициализированную структуру str, и можно приступать к ее использованию в программе.
  4. В данном коде нет других действий, которые могут быть выполнены в функции main().

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы