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

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

02.11.2010, 14:49. Показов 3475. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru