Страница: 1 |
Страница: 1 |
Вопрос: Символ из указателя на строку
Добавлено: 07.07.09 17:14
Автор вопроса: Brusco | ICQ: 175617069
Доброго времени суток.
Возникла такая проблема, есть ссылка на текстовую строку char *message и есть функция, в которую надо передать символы из этой строки по одному, но параметр в функции const char *. Конечно же типы не совпадают и ничего не передаётся. Пробовал приведение типов (const char *)message[0], но компилятор пишет "Error: expression cannot be evaluated" ну и прога вылетает, в переменной то пусто. Как можно передать в функцию один символ из указателя строки?
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Aston
ICQ: 214-179-991
Вопросов: 42
Ответов: 272
Профиль | | #1
Добавлено: 07.07.09 17:48
Вопрос не совсем понял но вот так можно получить символ из строки.
Номер ответа: 2
Автор ответа:
Brusco
ICQ: 175617069
Вопросов: 4
Ответов: 24
Профиль | | #2
Добавлено: 07.07.09 18:01
Спасибо, но мне надо на С++. В VB для этих целей кажись mid есть.
Номер ответа: 3
Автор ответа:
Arvitaly
ICQ: 301746136
Вопросов: 28
Ответов: 549
Web-сайт:
Профиль | | #3
Добавлено: 07.07.09 18:30
А присваивать по одному символу из первой строки другой и передавать?
Номер ответа: 4
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #4
Добавлено: 07.07.09 18:49
 const char *)message; так приводи тип. в твоем варианте приведения ты пытаешься один символ привести к типу указателя на строку.
Номер ответа: 5
Автор ответа:
Brusco
ICQ: 175617069
Вопросов: 4
Ответов: 24
Профиль | | #5
Добавлено: 07.07.09 22:53
Ну так мне и нужен один символ, а не вся строка. А всю строку приводить не надо, и так работает если передать просто message.
2Arvitaly. Так и попробовал сделать, но есть некоторые странности:
Запускаю на отладку F5->F11. Указатель как и положено равен 1 байт, но компилятор показывает, что там помимо нужного символа ещё какой-то мусор байт на 20 и конечно же всё это оказывается в функции.
Тогда компилирую программу, запускаю, в функции как и положено 1 байт.
Вообщем ничего не понимаю.
Номер ответа: 6
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #6
Добавлено: 07.07.09 23:23
читай про указатели. ты не до конца понял в чем их суть.
судя по твоему описанию один символ передается через указатель. тогда делать нада так
во вторых - чтобы хранить один байт не нужно выделять память. делаешь переменную так
На всякий пожарный дай описание функции и опиши что она делает с этим символом. Как то очень уж высосаным из пальца выглядит такое условие. Да еще и криво. Смысл передавать один символ через указатель. Или там все таки нормально передается по значению, и в параметр нада сунуть просто t...
Номер ответа: 7
Автор ответа:
Brusco
ICQ: 175617069
Вопросов: 4
Ответов: 24
Профиль | | #7
Добавлено: 08.07.09 00:27
При 1м варианте в функцию передаётся вся строка начиная с 4го символа.
При 2м варианте, если в t загнать символ t = message[3], то в функцию передаётся нужный символ + какой-то мусор при любом раскладе - и в отладчике и после компилирования приложения.
Описание функции:
SDL_Surface * SDLCALL TTF_RenderText_Blended(TTF_Font *font, const char *text, SDL_Color fg);
Это внешняя API-функция, так что изменить её нельзя. А делает она следующее - по заданному типу и размеру шрифта, текстовой строки и цвету возвращает указатель на поверхность, одним из параметров которой является отрендеренное изображение текстовой строки в пикселях.
Номер ответа: 8
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #8
Добавлено: 08.07.09 00:55
ппц. читай, как представлены строки в Си. это терминированный нулем массив символов. хочется вывести одну букву?
Номер ответа: 9
Автор ответа:
Brusco
ICQ: 175617069
Вопросов: 4
Ответов: 24
Профиль | | #9
Добавлено: 08.07.09 01:14
Теперь пашет, я чего-то совсем забыл, что в С строка и массив одно и тоже, спасибо.
Номер ответа: 10
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #10
Добавлено: 08.07.09 01:45
всегда пожалста