|
0 / 0 / 0
Регистрация: 16.03.2017
Сообщений: 51
|
||||||
Некоторые трудности с Си16.03.2017, 23:18. Показов 1897. Ответов 33
Здравствуйте. Помогите исправить ошибку в программе.
0
|
||||||
| 16.03.2017, 23:18 | |
|
Ответы с готовыми решениями:
33
Некоторые трудности с ЦАП
|
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
||||
| 17.03.2017, 02:46 | ||||
(void). Не (), а именно (void).char * выделяется какой-то жалкий 1 байт? Потом 2 байта...И зачем понаставлено приведений типа на результат функций выделения памяти?
0
|
||||
|
0 / 0 / 0
Регистрация: 16.03.2017
Сообщений: 51
|
||
| 17.03.2017, 02:57 [ТС] | ||
|
Байты: Я же не знаю, сколько строк хочет ввести пользователь. Каждой новой строке выделяется отдельное место.
Приведения: Так вроде же сами функции выделения памяти *void возвращают? А мне нужны эти указатели в виде *char. Или я не прав? <malloc.h>: Функция malloc() (предполагаю, что и realloc() тоже) не работает без этой библиотеки Добавлено через 3 минуты
0
|
||
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
|||||||||
| 17.03.2017, 03:20 | |||||||||
|
Как образом вы рассчитываете запихнуть указатель размером 4 (или 8) байтов в один байт памяти??? void *! В языке C тип void * является неявно приводимым к любому другому объектному указательному типу. Т.е. компилятор сам за вас все прекрасно приведет. Не надо захламлять код явными приведениями. Ненужные приведения типов - это всегда признак дурного стиля гамнокода.Функция realloc, например, требует на вход параметры типа void * и size_t. То есть согласно вашей же логике вы должны вызывать ее как
Во-вторых, эти функции работы с памятью объявлены в стандартном заголовочном файле <stdlib.h>. Вот его и надо подключить. Заголовочного файла <malloc.h>, еще раз, в стандартной библиотеке нет.Уж что-что, а <stdlib.h>, как правило, нужен везде, т.е. его смело можно включать безусловно.
0
|
|||||||||
|
0 / 0 / 0
Регистрация: 16.03.2017
Сообщений: 51
|
||||||||
| 17.03.2017, 03:24 [ТС] | ||||||||
0
|
||||||||
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
||||||||||||
| 17.03.2017, 03:26 | ||||||||||||
Сообщение было отмечено Twolka как решение
РешениеНо написать лучше вот так
sizeof и предназначен.А еще лучше вообще избавиться от упоминаний конкретных типов и написать так
malloc.
1
|
||||||||||||
|
0 / 0 / 0
Регистрация: 16.03.2017
Сообщений: 51
|
||
| 17.03.2017, 03:35 [ТС] | ||
|
Добавлено через 7 минут Без явных преобразований выводит вот такие вещи: значение типа "void *" нельзя использовать для инициализации сущности типа "char **" невозможно преобразовать "void *" в "char **" значение типа "void *" нельзя присвоить сущности типа "char **" инициализация: невозможно преобразовать "void *" в "char **"
0
|
||
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
||
| 17.03.2017, 03:37 | ||
|
P.S. Во времена динозавров в языке С действительно существовал заголовочный файл <malloc.h>. Но в стандартном С от него отказались, а объявления функций работы с памятью поместили в <stdlib.h>. У вас же в вашем компиляторе дух этого <malloc.h> еще продолжает болтаться чисто ради совместимости с каким-нибудь замшелым старинным кодом.
1
|
||
|
0 / 0 / 0
Регистрация: 16.03.2017
Сообщений: 51
|
|
| 17.03.2017, 03:38 [ТС] | |
|
0
|
|
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
||
| 17.03.2017, 03:40 | ||
|
Вы уж определитесь, на каком языке вы пишете. И, соответственно, выбирайте форум для своих вопросов правильно.
0
|
||
|
0 / 0 / 0
Регистрация: 16.03.2017
Сообщений: 51
|
|
| 17.03.2017, 03:40 [ТС] | |
|
0
|
|
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
|||||||
| 17.03.2017, 03:42 | |||||||
sizeof вы используете именно выражение (а не имя типа), то звездочка под sizeof всегда будет ровно одна.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 16.03.2017
Сообщений: 51
|
|||
| 17.03.2017, 03:44 [ТС] | |||
|
Добавлено через 1 минуту
0
|
|||
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
|||
| 17.03.2017, 03:46 | |||
.c, а не .cpp. Тогда они автоматически будут компилироваться Visual Studio как С.Альтернативно (вместо смены расширения) можно пойти в настройки компиляции для файла и явно сказать, что его следует компилировать именно как С.
0
|
|||
|
0 / 0 / 0
Регистрация: 16.03.2017
Сообщений: 51
|
||
| 17.03.2017, 03:48 [ТС] | ||
|
0
|
||
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
|||||||
| 17.03.2017, 03:59 | |||||||
GetLine у вас тоже есть работа с динамической памятью и вызовы malloc/realloc. В этом случае вы работаете с массивами из элементов типа char. Тип char отличается тем, что его размер в С (и С++) всегда равен 1. Это в свою очередь значит, что в этих вызовах malloc/realloc умножать все на sizeof явного смысла нет - это будет умножение на 1. И многие предпочитают этого не делать (именно когда работа идет с массивами [signed/unsigned] char). То есть с этой точки зрения исправлять в GetLine ничего не надо.Однако я бы все равно посоветовал вам придерживаться формальной идиомы: для выделения массива, указуемого указателем p пользоваться следующей формой записи
В общем, исправлять ли malloc/realloc в GetLine или оставить, как есть - вам решать.
2
|
|||||||
|
0 / 0 / 0
Регистрация: 16.03.2017
Сообщений: 51
|
||
| 17.03.2017, 04:06 [ТС] | ||
|
А как насчёт приведения к типу char*?
Добавлено через 35 секунд
0
|
||
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
||
| 17.03.2017, 04:14 | ||
|
А если вы продолжаете компилировать свой код как С++, то от этого приведения никуда не денешься - придется приводить.
0
|
||
|
0 / 0 / 0
Регистрация: 16.03.2017
Сообщений: 51
|
||
| 17.03.2017, 04:21 [ТС] | ||
|
Добавлено через 1 минуту не удается восстановить после предыдущих ошибок; остановка компиляции невозможно обновить базу данных программы "C:\Users\Twolka\Desktop\D.R.O.Z.D Example\Ex 1\Debug\vc140.pdb" Ex 1 c:\users\twolka\desktop\d.r.o.z.d example\ex 1\source.c
0
|
||
|
Вездепух
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
|
||||||||
| 17.03.2017, 04:26 | ||||||||
sizeof обычно будет ровно на одну больше, чем в выражении-получателе результата
Исправление ошибок в С и С++ программах обычно начинают с самой первой, а не с последней ошибки.
1
|
||||||||
| 17.03.2017, 04:26 | |
|
Помогаю со студенческими работами здесь
20
SQL Запросы в Базе Данных (SELECT, DELETE). Возникли некоторые трудности в их составлении Некоторые exe файлы открываются, некоторые - нет. На десктопе все открывается Не работают некоторые кнопки и не заполняются некоторые поля во всех браузерах
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|