Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
Вопрос не совсем понял но вот так можно получить символ из строки.
  1. Dim str As String = "Stroka"
  2.         Dim str1 = CType(str.Chars(0), String)

Ответить

Номер ответа: 2
Автор ответа:
 Brusco



ICQ: 175617069 

Вопросов: 4
Ответов: 24
 Профиль | | #2 Добавлено: 07.07.09 18:01
Спасибо, но мне надо на С++. В VB для этих целей кажись mid есть.

Ответить

Номер ответа: 3
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #3
Добавлено: 07.07.09 18:30
А присваивать по одному символу из первой строки другой и передавать?

Ответить

Номер ответа: 4
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #4
Добавлено: 07.07.09 18:49
 ;(const char *)message; так приводи тип. в твоем варианте приведения ты пытаешься один символ привести к типу указателя на строку.

Ответить

Номер ответа: 5
Автор ответа:
 Brusco



ICQ: 175617069 

Вопросов: 4
Ответов: 24
 Профиль | | #5 Добавлено: 07.07.09 22:53
const char *)message; так приводи тип. в твоем варианте приведения ты пытаешься один символ привести к типу указателя на строку.


Ну так мне и нужен один символ, а не вся строка. А всю строку приводить не надо, и так работает если передать просто message.

2Arvitaly. Так и попробовал сделать, но есть некоторые странности:

  1.  
  2. //Зарегил временный указатель
  3. char *t;
  4.  
  5. //Выделил под него память
  6. t = new char [1];
  7.  
  8. //Скопировал символ
  9. *t = message[3];
  10.  
  11. //Передал в функцию
  12. *sText = TTF_RenderText_Blended(fnt, t, clr);



Запускаю на отладку F5->F11. Указатель как и положено равен 1 байт, но компилятор показывает, что там помимо нужного символа ещё какой-то мусор байт на 20 и конечно же всё это оказывается в функции.
Тогда компилирую программу, запускаю, в функции как и положено 1 байт.
Вообщем ничего не понимаю.

Ответить

Номер ответа: 6
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #6
Добавлено: 07.07.09 23:23
читай про указатели. ты не до конца понял в чем их суть.
судя по твоему описанию один символ передается через указатель. тогда делать нада так

  1. *sText = TTF_RenderText_Blended(fnt, &message[3], clr);


во вторых - чтобы хранить один байт не нужно выделять память. делаешь переменную так

  1. char t;
  2. *sText = TTF_RenderText_Blended(fnt, &t, clr);


На всякий пожарный дай описание функции и опиши что она делает с этим символом. Как то очень уж высосаным из пальца выглядит такое условие. Да еще и криво. Смысл передавать один символ через указатель. Или там все таки нормально передается по значению, и в параметр нада сунуть просто 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-сайт: www.rascalspb.narod.ru
 Профиль | | #8
Добавлено: 08.07.09 00:55
ппц. читай, как представлены строки в Си. это терминированный нулем массив символов. хочется вывести одну букву?

  1. char t [2] = {0};
  2. t[0] = message[3];
  3. t[1] = '\0'; // не обязательно ибо нулем проинициализировали при объявлении, а изменили тока первый байт

Ответить

Номер ответа: 9
Автор ответа:
 Brusco



ICQ: 175617069 

Вопросов: 4
Ответов: 24
 Профиль | | #9 Добавлено: 08.07.09 01:14
Теперь пашет, я чего-то совсем забыл, что в С строка и массив одно и тоже, спасибо.

Ответить

Номер ответа: 10
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #10
Добавлено: 08.07.09 01:45
всегда пожалста

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам