Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Kristobald

Определение размера массива

15.10.2013, 13:56. Показов 2799. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем у меня несколько вопросов по языку си (компилятор gcc).

1) Есть, например след код:

C
1
2
3
4
5
6
7
char* sym;
char c = 'a';
sym = &c;
*++sym = 'b';
*++sym = '\0';
sym -= 2;
printf ("sym = %s", sym);
Я понимаю, что это извращения, но все же. Здесь как видно, создается указатель на char, далее инициализируется адресом переменной, затем последовательно указатель сдвигается на байт и в ячейку памяти с адресом указателя кладется литерал. Но как это мать его работает без ошибок??? Ведь память выделена только под один символ, а программа пытается записать что-то в неадресованную область памяти! Более того, если мы уберем из программы, пару строчек

C
1
2
3
4
5
6
char* sym;
*sym = 'a';
*++sym = 'b';
*++sym = '\0';
sym -= 2;
printf ("sym = %s", sym);
то она откажется работать, понятно почему, я бы сказал естественно. Ну а в предыдущем примере как так происходит, что не вылетает Segmentation fault (core dumped).

2) Практически та же программа (только чуть модифицированная). Откажемся от правила завершать строку '\0'
C
1
2
3
4
5
6
7
8
9
10
char* sym;
char c = 'a';
sym = &c;
*++sym = 'b';
*++sym = 'c';
*++sym = 'd';
*++sym = 'z';
*++sym = 'x';
sym -= 5;
printf ("sym = %s", sym);
У меня вопрос как printf смог определить размер строки которую надо напечатать, несмотря на то, что символ '\0' в конце не установлен? sizeof здесь не помогает (вернет 4) тогда как??? Значит все-таки есть способ определить длину динамического объекта типа new int (10) без возни с числом 10?

Заранее спасибо, жду комментариев. Эти вопросы ни одна книга не разбирает, было бы очень интересно разобраться!
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2013, 13:56
Ответы с готовыми решениями:

Определение размера массива
Код: template <class T,int N> int arr_sz(T (&arr)) {return N;} void sum(int a){cout<<a;}; int main() {

Определение размера динамического массива
Вопрос может не много глупый, но я подзабыл с. Считаю размер динамического массива и результат получается неверный, логическую ошибку...

Определение размера массива + sizeof
Массив из 6 чисел: sizeof возвращает 24 байта. Тот же массив вызван функцией возвращает только 4 байта. #include <iostream> ...

3
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
15.10.2013, 15:36
Цитата Сообщение от Kristobald Посмотреть сообщение
Но как это мать его работает без ошибок???
Да очень просто. Вся суть языка это дать человеку возможность прострелить себе ногу.

Цитата Сообщение от Kristobald Посмотреть сообщение
Значит все-таки есть способ определить длину динамического объекта типа new int (10) без возни с числом 10?
Вот здесь почитайте: Создание динамического массива структур и его удаление
(ответов там правда нету, но может чего умного в голову придет)
0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
16.10.2013, 00:06
Kristobald, посмотрите внимательно на два скриншота
Миниатюры
Определение размера массива   Определение размера массива  
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
16.10.2013, 01:05
Цитата Сообщение от Kristobald Посмотреть сообщение
Но как это мать его работает без ошибок???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2013, 01:05
Помогаю со студенческими работами здесь

Определение размера одномерного массива
Добрый день. Необходимо задать размер одномерного массива. В цикле for стоит переменная - счетчик, которая увеличивается на единицу при...

Определение размера массива в функции
Всем доброго дня ! Подскажите пожалуйста, как можно определить размер массива в функции ? запись int n = sizeof(a)/sizeof(int);...

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

Определение размера строки массива строк
Здравствуйте! Visual C++ char *my_string={"Это первая строка", "Это вторая строка", "Это третья...

Определение размера файла
Здравствуйте, я учусь на программиста, нужна помощь в программе. #include <fstream.h> #include <windows.h> #include...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru