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

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
natusik
Сообщения: 1
Зарегистрирован: 16 май 2014, 21:46

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

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

#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;
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

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

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

int main(...)
{
   ...
   char S[256];
   ...
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить