Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kristobald
#1

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

15.10.2013, 13:56. Просмотров 1037. Ответов 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?

Заранее спасибо, жду комментариев. Эти вопросы ни одна книга не разбирает, было бы очень интересно разобраться!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 13:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определение размера массива (C++):

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

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

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

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

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

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

3
SatanaXIII
Супер-модератор
Эксперт С++
5619 / 2654 / 247
Регистрация: 01.11.2011
Сообщений: 6,554
Завершенные тесты: 1
15.10.2013, 15:36 #2
Цитата Сообщение от Kristobald Посмотреть сообщение
Но как это мать его работает без ошибок???
Да очень просто. Вся суть языка это дать человеку возможность прострелить себе ногу.

Цитата Сообщение от Kristobald Посмотреть сообщение
Значит все-таки есть способ определить длину динамического объекта типа new int (10) без возни с числом 10?
Вот здесь почитайте: Создание динамического массива структур и его удаление
(ответов там правда нету, но может чего умного в голову придет)
0
vua72
416 / 416 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
16.10.2013, 00:06 #3
Kristobald, посмотрите внимательно на два скриншота
0
Миниатюры
Определение размера массива   Определение размера массива  
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
16.10.2013, 01:05 #4
Цитата Сообщение от Kristobald Посмотреть сообщение
Но как это мать его работает без ошибок???
Определение размера массива
0
16.10.2013, 01:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2013, 01:05
Привет! Вот еще темы с ответами:

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

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

Определение размера char** argv - C++
Есть массив строк char** argv где я знаю число строк argc for (int i = 0; i < argc; i++){ printf("%s \n",argv); } char**...

Определение размера типа переданного в шаблон - C++
Доброй день. Подскажите почему, sizeof в данном случае некорректно определяет размер структуры struct Preheader_1 { uint8_t...


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

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

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