![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
fuckerok |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 30.3.2004 Где: спб Репутация: нет Всего: нет |
есть функция возрата строки:
При такой функции строка выводится как надо, но sizeof(str) = 4 байта. (долго думал почему 4... только догадки) А мне нужно от sizeof(str) получить 10 байт (строка "helloworld" = 10 байтам) Конечно можно воспользоватся strlen, скажете вы, но этот способ мне не подходит потому-что strlen как я понял игнорирует символы типа 0x00 и тд, а мне это очень важно. Вообщем нужно возрвратить строки таким способом (или приобразовать её уже поле возвращения), чтобы можно было потом с ней работать также, если бы я сам назначил char str[] = "helloworld"; Никак не могу разобратся с этими указателями ![]() Подскажите, если вы меня поняли :] --------------------
|
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
это размер указателя
strlen(str); он не игнорирует , а этот символ означает конец строки -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
LPBOY |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
11 байт
Хм... не очень удобно работать со строкой в которой есть 0x00... Зачем это тебе? ИМХО, лучше всего использовать strlen(), но если очень надо чтобы sizeof(str) давал размер массива, то могу предложить такое вот извращение:
--------------------
Каждый человек по-своему прав, а по-моему нет... |
||||||
|
|||||||
fuckerok |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 30.3.2004 Где: спб Репутация: нет Всего: нет |
Мне в любом случае нужно знать размер в байтах, поэтому strlen не подходит
А значение str[] = "helloworld"; взято мной как пример, оно может быть типа char str[] = {0x0F, 0xFF, 0x00, 0xFF}; и тогда strlen не поможет. LPBOY Твой пример работает, но это частный случай с "hello world", на самом деле мы не знаем размер result (он приходит из космоса), следовательно не знаем сколько байт нужно выдилить функции для возвращения. Я думаю можно как-нить указателями сделать: возвратить его и как-то приобразовать... (но я 4 дня в c++, поэтому как это сделать я не знаю) Это сообщение отредактировал(а) fuckerok - 27.2.2006, 18:33 --------------------
|
|||
|
||||
LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Когда ты возвращаешь из функции указатель char*, то вся информация о размере массива уже теряется. Храни размер в отдельной переменной и передавай ее из функции, больше ничего не поделаешь...
--------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
fuckerok,
тогда твоё спасение - std::vector. и не надо голову ломать и что-то изобретать. |
|||
|
||||
LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Размер статического массива должен быть известен во время компиляции и из космоса он не может придти.
Храни размер отдельно или используй в vector<char>, как уже сказали. --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
fuckerok |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 30.3.2004 Где: спб Репутация: нет Всего: нет |
Не нравится мне этот memcpy, но вроде всё работает. Daevaorn, std::vector мы ещё не проходили ![]() all Спасибо товарищи, очень оперативно работаете. ![]() --------------------
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
std::string
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
Dov |
|
||||||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Как это может работать, ума не приложу.
Можно ещё так попробовать
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
||||||
|
|||||||
Гоганчик |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 5.3.2006 Репутация: нет Всего: нет |
Вообще-то функция strlen () предназначена для Си строк, т.е. тех, у которых в конце 0х00. Если ты используешь нулевой терминатор где-то в серединке, то это уже не си строка. Как люди говорят, либо используй вектор, либо изобретай велосипед... Другого пути нет.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |