-
Программирование в Си
Добрый день,
Подскажите пожалуйста только недавно начали Си изучать и нам дали такое задание: Считать строку любой длины с клавиатуры и переделать ее в массив с динамическим выделением памяти, вот код который я написала, ошибки он не выдает, но я не знаю правильно ли он работает?, и можно ли таким способом выделить память?
Код:
#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;
}
-
Думаю, что лучшее место для таких вопросов тут
Цитата:
Сообщение от
Natka
return 1;
Здесь ваша программа закончится в любом случае и с ошибкой
Цитата:
Сообщение от
Natka
strcpy(tab[i],S)
Что за переменная i ? Чему равно её значение и вообще, зачем она?
-
Мой вариант
Код:
#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
не пойму в чем проблема
Тут очепятка, но вряд ли от неё -
Цитата:
Сообщение от
RW4NY
#ibclude <string.h>
Но Борланд бы сразу ругнулся, без зависаний.
-
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;
}