|
|
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Вот решил наваять функцию substring для char* Получилось вот что (не обращать внимание на отсутствие проверок выхода за пределы граници т.п.) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. работает как и задумывалось - вводим "Test string", получаем "st s". Выношу это в функцию Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 15:24 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
похоже вы вообще не знакомы со способами обработки строк: а) вы убиваете исходную строку (ставите ее конец на символе len+pos и не восстанавливаете) б) возвращаете то, что лежит по адресу i+len я так понимаю надо: а) создать новую строку длинной len+1 б) скопировать в нее кусок данной строки в) вернуть указатель на новую строку либо а) завершить нанную строку б) вернуть src+pos что есть указатель на начало нужной вам строки в) вернуть исходную строку в первоначальное положение (вернуть зануленный байт) аффтопитезь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 15:38 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Что за Код: plaintext 1. ??? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 15:46 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
AkhЧто за Код: plaintext 1. ??? Код: plaintext 1. местный юмор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 15:48 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Никогда не используюте strcpy, когда памяти могут перекрываться. Используйте memmove ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 15:50 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Aklin AkhЧто за Код: plaintext 1. ??? Код: plaintext 1. местный юмор дух захватывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 15:51 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
А если ему так приказали реализовать? Например можно и тпк поправить Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 16:00 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Den_diТогда и ругать никого не надо На какой эти приведения типов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 16:11 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
char substr(char *str, int pos, int len) { str[pos+len]='\0'; return &str[pos]; // или return str+pos; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 16:19 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Akh Den_diТогда и ругать никого не надо На какой эти приведения типов? Как зачем , для понятности автору ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 16:30 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 16:42 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Akh Код: plaintext 1. 2. 3. 4. inline забыл! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 16:43 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
ну вы и черти :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 16:58 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
в смысле - спасибо, работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 16:58 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Aklin Akh Код: plaintext 1. 2. 3. 4. inline забыл! __fastcoll ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 17:19 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Den_di Aklin Akh Код: plaintext 1. 2. 3. 4. inline забыл! __fastcoll fastcall не нужен для inline ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 17:30 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Akh Код: plaintext 1. 2. 3. 4. Явно лишняя операция вычитания. И в меня терзают смутные сомнения - операция присваивания возвращает результат, а не переменную, вроде. Т.е. конструкция &(a=b) не осмысленна, но, возможно, я просто забыл синтаксис. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 18:26 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
nikname Akh Код: plaintext 1. 2. 3. 4. Явно лишняя операция вычитания. И в меня терзают смутные сомнения - операция присваивания возвращает результат, а не переменную, вроде. Т.е. конструкция &(a=b) не осмысленна, но, возможно, я просто забыл синтаксис. Работает с локальными данными точно, но с char *s="dsafa" обламывается. :) Специально проверял. Согласен, что не корректно. Но само измение исходных данных в функции тоже не корректно (не красиво). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 18:29 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Когда как. И функция и класс просто делают то, что должны. Возможно существуют задачи, в которых запросто можно портить буфер - поверить в это сложно, вспоминая семейство mid left и right. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 18:33 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Ну да - некорректно. Если бы это было корректно, то можно было бы писать что-то типа. int i=0; int j; int k; k = *(&(i=j++)); cout <<k; // выведет 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 18:35 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Чё-то я переборщил с мысленным экспериментом. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2006, 18:39 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
niknameКогда как. И функция и класс просто делают то, что должны. Возможно существуют задачи, в которых запросто можно портить буфер - поверить в это сложно, вспоминая семейство mid left и right. Вообще то, я ни припомню, что бы где-то портился исходный буфер. Что за семейство? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 09:53 |
|
||
|
указатели, строки и функция
|
|||
|---|---|---|---|
|
#18+
Я и написал об этом - я тож такое не помню. Все перечисленные мной функции выдают новые объекты. Не помню, правда, strcat что делает - вроде она к первому аргументу добавляет второй. Тем не менее никто не запрещает писать любые функции. Просто нужно знать, что такой substr отработает ровно один раз и испортит оригинал. Хотя я не понимаю - зачем. substr из этого примера = strncpy(newBuf,oldBuf+pos,len); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 14:24 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34110126&tid=2030093]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
145ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 435ms |

| 0 / 0 |
