Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
belkinjoy
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 5
1

Динамическое выделение памяти под массив строк

03.08.2015, 17:04. Просмотров 1760. Ответов 4
Метки нет (Все метки)

Программа выполняет конкатенацию произвольного количества строк. Но видимо я не правильно выделяю память под массив строк или неправильно считываю строки в массив. Какая ошибка?
код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
 
char *concat(char **s, int n) 
{ 
    int length = 0;
    for(int i = 0; i < n; i++) {
        length += strlen(s[i]);
    }
    char *str = (char *)malloc((length + 1) * sizeof(char));
    strcpy(str, s[0]);
    for(int i = 1; i < n; i++) {
        strcat(str, s[i]);
    }
    str[length] = '\0';
    return str;
}
 
int main()
{
    int n;  
    scanf("%d", &n);
    char **str = (char **)malloc(n * sizeof(char));
    for(int i = 0; i < n; i++)  
        str[i] = (char*)malloc(80 * sizeof(char));
    for(int i = 0; i < n; i++)
        gets(str[i]);
    char *p = concat(str, n);
    printf("%s",p);
    for(int i = 0; i < n; i++)
        free(str[i]);
    free(str);
    free(p);
    return 0;
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2015, 17:04
Ответы с готовыми решениями:

Динамическое выделение памяти под массив
Доброго времени! Требуется ввести размер массива с клав-ры, заполнить массив - изменить его размер...

Динамическое выделение памяти под массив
Здравствуйте, помогите пожалуйста сделать в процедуре input динамическое выделение памяти под...

Динамическое выделение памяти под двумерный массив
Доброго времени суток, есть программа которая создаёт двумерный массив, вопрос такой как можно...

Динамическое выделение памяти под многомерный массив
Проблема с выводом многомерного массива. Может память неправильно выделяю? Помогите чайнику. ...

Динамическое выделение памяти под массив структур
Подскажите, пожалуйста, как верно выделить память под массив структур, размер которого вводится в...

4
RodionGork
35 / 35 / 9
Регистрация: 01.08.2015
Сообщений: 111
Записей в блоге: 1
03.08.2015, 17:22 2
Выделяете и считываете вроде правильно. А в чем у вас ошибка выражается? Вылетает с segmentation fault или печатается не то что-то?

А, я понял о чем вы - у вас одна строка не попадает в результат - так?

Если да, то проблема в том что после scanf-а у вас следующий gets считывает конец той строки в которой число было. Т.е. нужно пустой gets добавить например.
1
belkinjoy
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 5
03.08.2015, 18:10  [ТС] 3
Ошибка heap corruption detected. Да,и считывается на одну строку меньше. Добавил gets, не помогает.
0
MansMI
1455 / 1163 / 551
Регистрация: 08.01.2012
Сообщений: 4,509
03.08.2015, 19:21 4
Лучший ответ Сообщение было отмечено belkinjoy как решение

Решение

str = (char **)malloc(n * sizeof(char*));
и gets(str[i]) на scanf("%s",str[i]) поменял, вроде работает

Добавлено через 9 минут
или не менять, но fflush(stdin); после scanf("%d",&n);
1
belkinjoy
0 / 0 / 0
Регистрация: 08.06.2015
Сообщений: 5
03.08.2015, 19:27  [ТС] 5
все заработало, спасибо большое
0
03.08.2015, 19:27
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2015, 19:27

Динамическое выделение памяти под одномерный массив
В общем, вопрос такой. Пусть нам нужно задать массив, используя динамическое выделение памяти....

Выделение памяти под динамический массив строк
Суть программы такова: при вызове функции количество структур увеличивается на одну, выделяется под...

Динамическое выделение памяти под файл
Дали задание считать масив чисел с файла Ф1, сделать над ним некоторые действия и получившийся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru