Непонятное поведение printf() - C (СИ)
Формулировка задачи:
Доброго времени суток всем. Недавно начал изучать си и возникло непонимание происходящего в программе.
Пишу cgi скрипт. Подключил библиотеку cgi-bin, скомпилировал все это дело, используя свою программу и статическую библиотеку, созданную через make.
Вот одна из функций библиотеки:
char *find_val(LIST *head, char *key);
Функция, исходя из написанного, возвращает УКАЗАТЕЛЬ на область памяти, в которую записана строка.
Соответственно, я в своем коде пишу:
При обращении к cgi-скрипту POST-запросом из PHP (библиотека curl) я подаю строку test=xxx (неважно, что там)
Но когда я обращаюсь к такой программе, написанной выше, я ожидаю увидеть АДРЕС ячейки памяти, а не значение XXX, потому что я создал переменную-указатель на строку. По сути, чтобы вывести значение, я должен написать:
Таким образом я произвошу развертку (не помню, как называется) и по указателю получаю значение, записанное в ячейку памяти.
По факту я получаю ошибку при компиляции, мол, неверный тип, ожидается строка а подан аргумент типа int. Тогда я меняю %s на %d, запускаю прогу и вижу "the value of the param "test" is the 72". Это даже не значение переменной, да и не адрес ячейки памяти. Это вообще чертовщина какая-то. Причем возвращается одно и то же значение (значит, это не мусор).
Т.к. си я изучаю первый день, я явно ошибаюсь. Но где? Поясните, пожалуйста. Мануалы читал, считал, что все понимаю, но этот пример сбил с толку.
LIST *input = cgi_input_parse(); char *key = "test"; char *str = find_val(input, key); printf("the value of the param \"test\" is the %s", str);
printf("the value of the param \"test\" is the %s", *str);
Решение задачи: «Непонятное поведение printf()»
textual
Листинг программы
char s[5] = "test"; char *keyref = s; printf("%s\n", keyref);
Объяснение кода листинга программы
- Объявляется массив символов s[5] и инициализируется строкой
test
- Создается указатель keyref на первый элемент массива s
- Выводится значение указателя keyref с помощью функции printf() Обратите внимание, что в данном коде не происходит вывода значения переменной s. Выводится только адрес, на который указывает указатель keyref.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д