| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > возвращение массива строки |
| Автор: fuckerok 27.2.2006, 17:47 | ||
есть функция возрата строки:
При такой функции строка выводится как надо, но sizeof(str) = 4 байта. (долго думал почему 4... только догадки) А мне нужно от sizeof(str) получить 10 байт (строка "helloworld" = 10 байтам) Конечно можно воспользоватся strlen, скажете вы, но этот способ мне не подходит потому-что strlen как я понял игнорирует символы типа 0x00 и тд, а мне это очень важно. Вообщем нужно возрвратить строки таким способом (или приобразовать её уже поле возвращения), чтобы можно было потом с ней работать также, если бы я сам назначил char str[] = "helloworld"; Никак не могу разобратся с этими указателями Подскажите, если вы меня поняли :] |
| Автор: LPBOY 27.2.2006, 18:19 | ||||||
11 байт
Хм... не очень удобно работать со строкой в которой есть 0x00... Зачем это тебе? ИМХО, лучше всего использовать strlen(), но если очень надо чтобы sizeof(str) давал размер массива, то могу предложить такое вот извращение:
|
| Автор: fuckerok 27.2.2006, 18:24 |
| Мне в любом случае нужно знать размер в байтах, поэтому strlen не подходит А значение str[] = "helloworld"; взято мной как пример, оно может быть типа char str[] = {0x0F, 0xFF, 0x00, 0xFF}; и тогда strlen не поможет. LPBOY Твой пример работает, но это частный случай с "hello world", на самом деле мы не знаем размер result (он приходит из космоса), следовательно не знаем сколько байт нужно выдилить функции для возвращения. Я думаю можно как-нить указателями сделать: возвратить его и как-то приобразовать... (но я 4 дня в c++, поэтому как это сделать я не знаю) |
| Автор: LPBOY 27.2.2006, 18:29 |
| Когда ты возвращаешь из функции указатель char*, то вся информация о размере массива уже теряется. Храни размер в отдельной переменной и передавай ее из функции, больше ничего не поделаешь... |
| Автор: Daevaorn 27.2.2006, 18:30 |
| fuckerok, тогда твоё спасение - std::vector. и не надо голову ломать и что-то изобретать. |
| Автор: LPBOY 27.2.2006, 18:47 | ||||
Размер статического массива должен быть известен во время компиляции и из космоса он не может придти.
Храни размер отдельно или используй в vector<char>, как уже сказали. |
| Автор: fuckerok 27.2.2006, 18:50 | ||
Не нравится мне этот memcpy, но вроде всё работает. Daevaorn, std::vector мы ещё не проходили all Спасибо товарищи, очень оперативно работаете. |
| Автор: MAKCim 27.2.2006, 19:12 |
| std::string |
| Автор: Dov 27.2.2006, 21:40 | ||
|
| Автор: Dov 1.3.2006, 16:04 | ||||||
| Как это может работать, ума не приложу.
Можно ещё так попробовать
|
| Автор: Гоганчик 5.3.2006, 14:00 |
| Вообще-то функция strlen () предназначена для Си строк, т.е. тех, у которых в конце 0х00. Если ты используешь нулевой терминатор где-то в серединке, то это уже не си строка. Как люди говорят, либо используй вектор, либо изобретай велосипед... Другого пути нет. |