WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  символьный массив

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   символьный массив
MasyA опубликован 15-01-2002 15:13 MSK   Click Here to See the Profile for MasyA   Click Here to Email MasyA  
Есть у меня в проге такая массив:
char buffer[128];
Сразу после инициализации глянул на него и
увидел типа такого: "Ёъ3|оЖ " и т.д.
Получается такой массив только выделяет место в памяти,но не очищает его(типа
buffer="")?
P.S: В MSDN не нашел топика на эту тему.
rodion опубликован 15-01-2002 15:20 MSK     Click Here to See the Profile for rodion  Click Here to Email rodion     
Кто сказал что он должен что то очищать?
С какой стати?
MasyA опубликован 15-01-2002 15:41 MSK     Click Here to See the Profile for MasyA  Click Here to Email MasyA     
А почему бы и нет.Дофига вещей за нас
делает VC,почему-бы и не очистить?
Я ж не возмущаюсь,что за меня вообще
VC должен сам проги писать,я просто спрашиваю
как оно обстоит на самом деле. Так вот :)
eyes опубликован 15-01-2002 15:47 MSK     Click Here to See the Profile for eyes  Click Here to Email eyes     
Мало ли чем ты собрался заполнить свой буффер. Может и инициализация не нужна вообще (это должен решать сам программист).
michl_m опубликован 15-01-2002 19:46 MSK     Click Here to See the Profile for michl_m  Click Here to Email michl_m     
MasyA , ты неправ.
Скажи спасибо компилятору, что он позволяет вещи типа
char str[256]="My string";
А то ты захотел так:
int i;
i += 10;
и в результате (i==15), т.к. в начале ты считал, что i=5. Так ведь не бывает, в лучшем случае i=0 в debug.
Резюме: всегда надо инициализировать:
int i(0);
char a[256]("aaaaaa");

P.S. Последние две строки - шутка. Хотя работает( принцип конструктора, в С++ все имеет конструкторы, даже int).

rivitna опубликован 15-01-2002 21:35 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
В чем прелесть неинициализированных данных? В размере exe-ника! За инициализацию надо платить кодом! А твой buffer - это просто область памяти, зарезервированная область памяти. Есть так называемая секция BSS PE-файлов, куда помещаются неинициализированные данные. Она учитывается в секции .data, раздвигая ее размер до требуемого.
Если тебе так неймется инициализировать, добавь перед использованием buffer:
buffer[0] = '\0'
Это займет примерно 8 байт кода вместо 128 - выигрыш налицо!
ADK опубликован 16-01-2002 05:51 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
buffer[0] = '\0' - только для строк прокатит. Я всегда так делаю, и для структур, в результате многие поля не надо заполнять - ZeroMemory(pBuf, nBufSize); и всё!
eyes опубликован 16-01-2002 07:36 MSK     Click Here to See the Profile for eyes  Click Here to Email eyes     
>Она учитывается в секции .data, раздвигая ее размер до требуемого.

Выход только один: пихать в стек?

rivitna опубликован 16-01-2002 08:08 MSK     Click Here to See the Profile for rivitna  Click Here to Email rivitna     
> Выход только один: пихать в стек?

Не всегда! Много в стек не пихнешь. Команда ассемблера enter, которую VC вставляет в пролог для локальных переменных, позволяет в стек пихнуть максимум 65535 байт. Даже если пользоваться sub esp,LOC_SIZE. Можно упасть на дно стека! Стек это не панацея! Даже иногда может привести к прикольным моментам, если в программе есть переключение с одного уровня привилегий на другой. В этом случае стек подменяется.

Надо все писать к месту из соображений удобства и эффективности.
Что-то можно, как неинициализированные данные, что-то в стеке, а что-то в куче, что чаще.

eyes опубликован 16-01-2002 08:32 MSK     Click Here to See the Profile for eyes  Click Here to Email eyes     
> Выход только один: пихать в стек?

Я кучу и имел в виду.
[Как отвратительно в России по утрам]

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.