Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2013, 00:33   #1
Саша85
 
Регистрация: 10.05.2013
Сообщений: 5
По умолчанию Передача значения функции printf в процессе исполнения

Изучал как работает парсинг командной строки в Си. В процессе наткнулся на непонятное поведение функции printf().
Вот пример кода, который был использован мною.(возможно быдлокод)
Выводим полученные параметры. Пусть в обратном порядке, так меньше переменных.
Код:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
	printf("Parameters counter\n");
	printf("You have %d parameters in the command line\n",argc);

	while(argc){	
		argc--;
		printf(argv[argc]);	
	}

	system("pause");
	return 0;
}
Проблема вот в чём. Если при запуске передать program.exe \n, то по идее мы должны были получить просто перевод строки, но тем не менее мы просто видим тот же самый \n. Я решил проверить, возможно игнорируется форматирование, но передав, к примеру %d, функция выведет какое-то число. (да, я понимаю, мы выводим какой-то случайный параметр, который оказался в стеке, но ведь это доказало, что функция всётаки форматирует вывод.)
Саша85 вне форума Ответить с цитированием
Старый 11.05.2013, 00:56   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Функция не форматирует вывод. Просто в параметрах передаются строки "\n" или "%d". \n в коде программы будет преобразован в код непечатного символа перевода каретки. Ох, даже не знаю, как это выразить. \n и "\n" - не одно и то же. "%d" никак не преобразуется, в отличие от \n, и printf воспримет его, как спецификатор вывода. Или перефразировав, это не printf преобразует \n в перевод строки, а компилятор.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 11.05.2013, 01:08   #3
Саша85
 
Регистрация: 10.05.2013
Сообщений: 5
По умолчанию

Если это компилятор преобразует, тогда это всё объясняет! Спасибо. Надо посмотреть скомпилированную прогу в дебагере дизасемблере или просто в hex редакторе.
Саша85 вне форума Ответить с цитированием
Старый 11.05.2013, 22:17   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Если это компилятор преобразует, тогда это всё объясняет! Спасибо.
Обратите внимание, что существует символ (символьный литерал), записываемый в коде как '\n', наряду с символами 'a', '5' или '$'.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача значения из функции в функцию(с++) asdasys Помощь студентам 1 11.10.2012 22:04
C++: Вывод целого/дробного значения, printf Nomicos Помощь студентам 0 28.07.2012 19:20
Синтаксис функции printf в PHP Aleskandr Помощь студентам 14 14.02.2011 10:33
передача значения функции proga. Помощь студентам 5 29.10.2009 22:23
Блокировка функции в процессе ее работы Andr180nag JavaScript, Ajax 2 11.08.2008 18:07