Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Локальные переменные

1.9K
02 декабря 2008 года
[*]Frosty
278 / / 17.06.2006
Кто знает почему не работает след. код

 
Код:
int i = 15;
printf("%i");


В билдере все супер, а в студии не работает - выдает 0 вместо 15
Опция Buffer Security Check(/GS) отключена
Где локальная переменная i? Почему выводиться 0? :)
288
02 декабря 2008 года
nikitozz
1.2K / / 09.03.2007
[QUOTE='
  • Frosty;268257']Кто знает почему не работает след. код

     
    Код:
    int i = 15;
    printf("%i");


    В билдере все супер, а в студии не работает - выдает 0 вместо 15
    Опция Buffer Security Check(/GS) отключена
    Где локальная переменная i? Почему выводиться 0? :)[/QUOTE]

    Вообще-то в Builder'е тоже не "все в порядке". Чуть-чуть исправьте свой код и вы в этом убедитесь.
     
    Код:
    int i = 15;
    int b = 5;
    printf("%i");


    Должно быть так
     
    Код:
    int i = 15;
    printf("%i", i);


    Советую почитать описание функций ввода/вывода.
  • 1.9K
    02 декабря 2008 года
    [*]Frosty
    278 / / 17.06.2006
    Вопрос не новичка!
    И не тривиальный!
    14
    02 декабря 2008 года
    Phodopus
    3.3K / / 19.06.2008
    [QUOTE='
  • Frosty;268262']Вопрос не новичка! И не тривиальный![/QUOTE]
    Вопрос может и не тривиальный, но уж новичка-то точно.
    [QUOTE='
  • Frosty;268257']Где локальная переменная i? Почему выводиться 0? :)[/QUOTE]
    i на своем месте. Вы путаете имя переменной и спецификатор формата.
    Выводится то число, которое лежит на стеке. Плюс к этому VC++ может проверять параметр va_list и при несовпедении числа спецификаторов с числом параметров выводить некое дефолтовое значение вместо того чтобы лезть на стек. Что из этого происходит на самом деле - вопрос исследования конкретной CRT.
  • 1.9K
    02 декабря 2008 года
    [*]Frosty
    278 / / 17.06.2006
    Я не новичек. Я не путаю имя переменной и спецификатор формата - случайно получилось)
    Цитата:
    Выводится то число, которое лежит на стеке. Плюс к этому VC++ может проверять параметр va_list и при несовпедении числа спецификаторов с числом параметров выводить некое дефолтовое значение вместо того чтобы лезть на стек. Что из этого происходит на самом деле - вопрос исследования конкретной CRT.


    А это уже что-то от чего можно отолкнуться
    Я просто не нашел ничего врозумительно по данной теме - сейчас продолжим поиски)
    Люблю покопаться в мелочах)

    288
    03 декабря 2008 года
    nikitozz
    1.2K / / 09.03.2007
    [QUOTE='
  • Frosty;268262']Вопрос не новичка!
    И не тривиальный![/QUOTE]

    Так я этого и не сказал. Хотя, признаться, так и подумал.
    Не понял из постановки вопроса, что вы ищите различия в реализациях этой функции в Builder'e и в VS.
  • 1.9K
    03 декабря 2008 года
    [*]Frosty
    278 / / 17.06.2006
    Ставлю вопрос по другому)
    В VS как-то безопасно реализованна функция printf?
    Так что не реализует ее "старое поведение"?
    Старое поведение:
    Если при вызове printf аргументов в стеке меньше, чем требуется для обработки строки форматирования, то недостающие аргументы читаются со стека, несмотря на то, что на стеке находятся произвольные данные (не имеющие отношения к работе printf).

    З,Ы, В нашем случае данные не имеющие отношения к printf - это локальная переменная i (сорри, что ее так назвал и всех ввел в заблуждение :) )
    Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
    Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог