Страница 1 из 1

Подскажите пожалуйста правильно ли я, динамически распределяю память?

Добавлено: 16 май 2014, 21:52
natusik
Подскажите пожалуйста только недавно начали Си изучать и нам дали такое задание: Считать строку любой длины с клавиатуры и переделать ее в массив с динамическим выделением памяти, подскажите пожалуйста почему код не работает?

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#ibclude <string.h>

int main(int argc, char *argv[])
{
    char *S,*p;

    printf("Введите предложение");
    gets(S);                       // считываю предложение
    p = (char*)malloc(strlen(S)+1);// выделение памяти 
    if(!p) {                       //проверяю есть ли свободная память
        printf("Невозможно выделить память");
        return 1;
    }
    strcpy(p,S);              //копирую строку в массив
    printf(p);                //вывод содержимого динамического массива
    free(p);                  //освобождение памяти
    return 0;
}

Re: Подскажите пожалуйста правильно ли я, динамически распределяю память?

Добавлено: 19 май 2014, 15:54
Romeo
Дело в том, что память выделяется только под указатель p, а под указатель S не выделяется. Поэтому и не работает. Строку S можно выделить, например, на стеке:

Код: Выделить всё

int main(...)
{
   ...
   char S[256];
   ...
}