![]() |
|
Модераторы: bsa |
![]()
|
|
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: нет Всего: 1 |
Почему в первом случае выдается в окошке 13(i = 13), а во втором 4(i = 4) ?, хотя по идее и во втором случае должно выдавать тоже 13
|
|||
|
||||
| Cтpaнник |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 53 Регистрация: 12.10.2008 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
В первом случае, buff - это константный строковый литерал размером 13 (12 значащих символов + завершающий 0). Во втором случае, buf - это аргумент функции, указатель (на i32 размером 4). Все правильно показывает
|
|||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
Потому что в первом случае вычисляется размер массива, а во втором - указателя.
|
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: нет Всего: 1 |
хорошо, как мне в функции узнать размер буфера по его char* указателю buf при передачи параметра ? то есть выйти на это число 13 в функции
|
|||
|
||||
| Soah |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 18.2.2009 Репутация: 6 Всего: 54 |
Это сообщение отредактировал(а) Soah - 23.2.2009, 23:24 |
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: нет Всего: 1 |
нет не пойдет strlen у меня будут нулевые символы '\0', в том то и дело... не хотелось бы создавать еще один доп параметр чтобы передавать в функцию.
поехали дальше |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 2 Всего: 10 |
Так у вас buff и так содержит нулевой символ.
Добавлено @ 00:04 Или как Вы думаете тот же MessageBox определяет длину Вашей строки??? Советую внимательно изучить документацию по работе со строками и учебник по С/С++ Добавлено @ 00:06 Не прав. string - содержит описание std::basic_string<> и std::string и иже с ними либо #include <cstring> // С++ либо #include <string> // C и C++ Это сообщение отредактировал(а) cutwater - 24.2.2009, 00:07 |
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: нет Всего: 1 |
да нет же не правильно меня поняли или я неправильно выразился, основы с++ я давно уже выучил, мне это нужно для более сложной операции чем показывать окошко hello world
поменяем char buff[]="\x4d\x45\x0f\x00\x23\x2b"; strlen - покажет в этом случае 3, а мне в функции нужно оперировать числом 6 - колво символов или размерность буфера который передается параметром, чтобы перебрать все символы в буфере...а если не подключать string или не передавать доп параметром размерность буфера ? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
типа такого чтоли?
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Soah |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 18.2.2009 Репутация: 6 Всего: 54 |
можно присвоить размерность первому элементу, если размерность не превысит 255.
|
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 2 Всего: 10 |
12usver12, Вы неправильно выразились.
Для этого лучше всетаки передавать 2 параметром длинну строки. это нормальный, человеческий способ. либо завернуть в структуру. Все остальное извращения или под конкретные задачи. То что я описал - общепринятые способы работы с двоичными строками(даже в стандартной библиотеке) Необходимо ЯВНО указывать размер строки. По указателю никак не определить. Добавлено через 23 секунды Soah, это из рода извращений уже ИМХО Добавлено через 1 минуту и 7 секунд Отработает до первого нуля в строке. |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 11 Всего: 88 |
Это сообщение отредактировал(а) Dov - 24.2.2009, 02:18 -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 11 Всего: 88 |
Наверное, так будет лучше:
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: нет Всего: 1 |
спасибо всем, особенно Dov, хотя наверно для эстетики придется еще один доп параметр вводить
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |