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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2010, 12:57   #1
~~~
Заблокирован
 
Регистрация: 13.09.2010
Сообщений: 16
Вопрос адреса на C

Пишу на Си чистом такой код:
Код:
printf("abcdefg");
Как теперь мне получить адреса букв из строки, которая передана в printf?
Строка именно строкой передаётся, и нигде ранее не описывается.
~~~ вне форума Ответить с цитированием
Старый 13.09.2010, 14:56   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

никак, объявите переменную или константу
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.09.2010, 15:34   #3
~~~
Заблокирован
 
Регистрация: 13.09.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
никак, объявите переменную или константу
просто один человек уверяет, что это сделать можно

И если я объвлю переменную с этой строкой, и потом ее передам в printf, то адрес этой переменной будет тот же, как если бы я передавал строку "abcdefg" в printf напрямую?
~~~ вне форума Ответить с цитированием
Старый 13.09.2010, 15:42   #4
ZaRDaK
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 197
По умолчанию

>> И если я объвлю переменную с этой строкой, и потом ее передам в printf, то адрес этой переменной будет тот же, как если бы я передавал строку "abcdefg" в printf напрямую?

Нет.
ZaRDaK вне форума Ответить с цитированием
Старый 13.09.2010, 15:45   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в общем случае да(для глобальной или тупо указателя на строку/char*)
ибо строковые константы все равно нужно располагать в памяти.

кстати, я подумал, в принципе извратившись можно вытянуть адрес, но зачем?

ZaRDaK, подтвердите свои слова аргументами.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.09.2010, 15:47   #6
~~~
Заблокирован
 
Регистрация: 13.09.2010
Сообщений: 16
По умолчанию

Код:
printf("abcdefg");
а тогда как определить, в какой области памяти хранится "abcdefg"? Ведь этот текст где-то храниться.
~~~ вне форума Ответить с цитированием
Старый 13.09.2010, 15:49   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ZaRDaK
Ошибаешся
Цитата:
просто один человек уверяет, что это сделать можно
Ты побольше слушай хакеров и станешь писать программы которые будут падать от просто так:
Код:
    printf("1234\n");
    char *c;
    _asm{
        mov eax,[esp-4]
        mov c,eax;
    }
    printf(c);
    getchar();
    return 0;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.09.2010, 15:50   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

через асм можно, но надо знать особенности компилятора(некоторые компили инициализируют параметры передающиеся в функции как и локальные переменные)

Виталий, компиль какой?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.09.2010, 16:11   #9
~~~
Заблокирован
 
Регистрация: 13.09.2010
Сообщений: 16
Радость

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
    printf("1234\n");
    char *c;
    _asm{
        mov eax,[esp-4]
        mov c,eax;
    }
    printf(c);
    getchar();
    return 0;
Спасибо, работает
Только, чтобы адрес вывести нужно printf("%d", &c), а то printf(c) просто строку выводит исходную.
~~~ вне форума Ответить с цитированием
Старый 13.09.2010, 16:16   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
компиль какой?
Visual Studio 2010.
Цитата:
а то printf(c) просто строку выводит исходную.
А нужно что? Ты же строку хотел?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение с адреса aktivizion Общие вопросы Delphi 3 23.04.2010 17:18
Адреса и непонятки... iGlass Win Api 3 16.02.2010 22:54
Установка IP адреса Raivolo Работа с сетью в Delphi 11 11.02.2009 18:03
абсолютные адреса kano Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 01.07.2008 20:49
2 одинаковых Ip адреса Alar Работа с сетью в Delphi 12 24.12.2006 10:21