С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для shalad
7 / 7 / 2
Регистрация: 17.05.2010
Сообщений: 122

Создать массив в динамической памяти

02.11.2010, 14:49. Показов 3429. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне надо создать массив в динамической памяти (на Си) из n элементов:
C
1
char *x = (char *) malloc(n * sizeof(char));
Вопрос первый: это нормально, что при отладке, в локальных епременных пишется:
x 0x00791378 "НННННээээ««««««««юою"
?
Вопрос №2: Вообще корректно так создавать динамический массив?
3 вопрос: Пишу так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
n = 5;
char *x = (char *) malloc(n * sizeof(char));
 
    for (int i = 0; i<n; i++)
    {
        x[i] = '0';
    }
 
    for (int i = 0; i<n; i++)
    {
        printf("Введите %d-й знак:", i+1);
        scanf("%c", &x[i]);
    }
Результат:

Введите 1-й знак:Введите 2-й знак:n
Введите 3-й знак:Введите 4-й знак:o
Введите 5-й знак:
Для продолжения нажмите любую клавишу . . .

То есть он запрашивает только 2й и 4й знак, а в остальных пишет [''] (без скобок)

После всего в локальных переменных пишется
0x008b7048 "
n
o
ээээ««««««««юоюоюою"

То есть перед n, после n, и после o - символы переноса строки(может при нажатии enter до scanf'а он этот символ читает тоже?)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2010, 14:49
Ответы с готовыми решениями:

Функция получает массив указателей на строки и возвращает строку в динамической памяти
Функция получает массив указателей на строки и возвращает строку в динамической памяти, содержащую объединенный текст из входных строк.

Перевернуть массив, не зная количества введенных чисел (с использованием динамической памяти)
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define N 1000 void print_arr(int a, int n) { for(int i = n; i &gt;= 0; i--) ...

Создать массив строк динамической длины
Имеется переменная-количество строк и заполненный массив длин строк (все строки разной длины). Все данные вычисляются по ходу выполнения...

17
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
02.11.2010, 15:56
1) да
2)да

C
1
2
3
4
for (int i = 0; i<n; i++)
        {
                x[i] = '0';
        }
calloc может сразу занулить

3) да, какую функцию юзать вместо scanf хз
[/C]
0
 Аватар для shalad
7 / 7 / 2
Регистрация: 17.05.2010
Сообщений: 122
02.11.2010, 16:28  [ТС]
Saiberg,
Цитата Сообщение от Saiberg Посмотреть сообщение
да, какую функцию юзать вместо scanf хз
то есть надо другую функцию юзать? какую?

Добавлено через 7 минут
Неа, все одно и тоже
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
02.11.2010, 16:30
Ну допустим так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int n = 5;
    
    char *x = (char *) malloc(n * sizeof(char));
 
    for (int i = 0; i<n; i++)
        {
                x[i] = '0';
        }
 
        for (int i = 0; i<n; i++)
        {
                printf("Введите %d-й знак:", i+1);
                char temp;
                while( (temp = getchar())=='\n' ) ;
                
                *(x+i)=temp;
        }
 
        printf("%s",x);
    system("pause");
    return 0;
0
 Аватар для shalad
7 / 7 / 2
Регистрация: 17.05.2010
Сообщений: 122
02.11.2010, 16:45  [ТС]
Одно и тоже
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
02.11.2010, 16:45
Что именно ты имеешь в виду под одно и тоже ? символы у меня норм вводятся.
завершающий ноль пиши как \0
0
 Аватар для shalad
7 / 7 / 2
Регистрация: 17.05.2010
Сообщений: 122
02.11.2010, 16:46  [ТС]
ща попробую


Это по прошлому, ща проверю
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
02.11.2010, 16:49
Можно было и со scanf сделать ,так же отсеивая ненужные символы...
0
 Аватар для shalad
7 / 7 / 2
Регистрация: 17.05.2010
Сообщений: 122
02.11.2010, 16:50  [ТС]
результат: Введите 1-й знак:1
Введите 2-й знак:2
Введите 3-й знак:3
Введите 4-й знак:4
Введите 5-й знак:5
12345ээээ<<<<<<<<юоюоюоюДля продолжения нажмите любую клавишу . . .

А нужно просто 12345 без ээээ<<<< блаблабла
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
02.11.2010, 16:51
нужно в конце ставить \0

исправить можно например так :
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int n = 6;
    
    char *x = (char *) malloc(n * sizeof(char));
 
    for (int i = 0; i<n; i++)
        {
                *(x+i) = '\0';
        }
 
        for (int i = 0; i<n-1; i++)
        {
                printf("Введите %d-й знак:", i+1);
                char temp;
                while( (temp = getchar())=='\n' ) ;
                
                *(x+i)=temp;
        }
 
        *(x+6)=0;
 
        printf("%s",x);
    system("pause");
    return 0;
1
 Аватар для shalad
7 / 7 / 2
Регистрация: 17.05.2010
Сообщений: 122
02.11.2010, 20:22  [ТС]
Спасибо!

Добавлено через 3 часа 8 минут
Из этого всего мне непонятно это:
C
1
while( (temp = getchar())=='\n' ) ;
Добавлено через 9 минут
аа, это он присваивает temp то что я ввел и ждет символа конца строки, да?

Добавлено через 9 минут
Вот еще вопрос, как можно прочитать строку scanf'ом(неизвестной длины), а потом зсунуть в динамический массив с разбиением на символы?, тоесть написать что-то типа "строка", в x[0] будет "с", в x[1] будет "т" и т.д.?
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
02.11.2010, 21:13
C
1
while( (temp = getchar())=='\n' ) ;
Если enter то ждет другого символа...и да, присваивает temp.

Насчет второго вопроса
C
1
2
char str[10];
scanf("%s",&str);
1
 Аватар для shalad
7 / 7 / 2
Регистрация: 17.05.2010
Сообщений: 122
02.11.2010, 21:30  [ТС]
А если строка больше, чем 10 символов, или это неважно?
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
02.11.2010, 21:37
важно,больше 10 нельзя вводить.
Как решить проблему ?
1)выделить большой буфер под строку
2)сначала ввести размер строки и динамически выделить под нее буфер

Остальные способы сложные. По крайне мере мне известные...Не особо заморачивался с консольным вводом/выводом , так что могу ошибатся
1
 Аватар для shalad
7 / 7 / 2
Регистрация: 17.05.2010
Сообщений: 122
02.11.2010, 22:06  [ТС]
Цитата Сообщение от Saiberg Посмотреть сообщение
сначала ввести размер строки
т е спросить у юзера скока символов в строке?
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
02.11.2010, 22:09
типо того : )
1
 Аватар для shalad
7 / 7 / 2
Регистрация: 17.05.2010
Сообщений: 122
02.11.2010, 23:20  [ТС]
хм... издевательство)

Добавлено через 1 час 5 минут
А как определить конец строки? т е объявлю я массив x[100] а в строке 10 символов. Массивы от x[0] до x[9] будут заполнены, а дальше? Мусор? или в x[10] вставить \0? Как?

Добавлено через 5 минут
Ааа, разобрался, теперь вопрос в другом, scanf вроду сканит только до разделителя (в данном случае до пробела, если введена строка "Some String"), какая альтернатива данной функции
0
 Аватар для Saiberg
20 / 20 / 2
Регистрация: 23.09.2010
Сообщений: 193
02.11.2010, 23:33
gets() например
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2010, 23:33
Помогаю со студенческими работами здесь

Создать в динамической памяти одномерный массив
Всем добрый день! Помогите с решением задачи. ...

Создать в динамической памяти одномерный массив целых чисел
Создать в динамической памяти одномерный массив целых чисел. вычислить сумму четных отрицательных элементов

Создать в динамической памяти двумерный массив целых чисел.
Народ выручайте, по уши в долгах. Решить задачу на C++ Условие: Создать в динамической памяти двумерный массив целых чисел. ...

А если создать массив в динамической памяти, то какое у него имя?
Здравствуйте. Вот в задаче нужно создать массив в динамической памяти. Скажите пожалуйста, если написать int *p=new то какое имя...

Массив в динамической памяти
Помогите написать прогу в динамической памяти #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #define N 10 void novmas (int A,int B) ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru