PDA

Просмотр полной версии : Программирование в Си



Natka
16.05.2014, 06:44
Добрый день,

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





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

int main(int argc, char *argv[])
{
char *S;
int *p, i;
int t = 20;




printf("Введите предложение");

gets(S); // считываю предложение

p = (char*)malloc(strlen(S)+1);// выделяю память

if(!p) //проверяю есть ли свободная память

printf("Невозможно выделить память");

return 1;

char tab[*p]; //создаю массив

strcpy(tab[i],S); //копирую строку в массив

system("PAUSE");
return 0;
}

RW4O
16.05.2014, 07:46
Думаю, что лучшее место для таких вопросов тут (http://www.cyberforum.ru/c/thread1177596.html)

return 1;
Здесь ваша программа закончится в любом случае и с ошибкой

strcpy(tab[i],S)
Что за переменная i ? Чему равно её значение и вообще, зачем она?

RW4O
16.05.2014, 08:29
Мой вариант

#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;
}

Natka
16.05.2014, 22:08
Спасибо Вам что ответили, я попыталась скомпилировать Ваш код но компилятор зависает, не пойму в чем проблема

ER1CS
16.05.2014, 22:15
не пойму в чем проблема
Тут очепятка, но вряд ли от неё -

#ibclude <string.h>
Но Борланд бы сразу ругнулся, без зависаний.

RW4O
17.05.2014, 08:09
Natka
Каким компилятором польхуетесь?
Исправленный вариант

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

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

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