Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Вот что я ненавижу в С - так это строковые функции...
Ну что за убожество! Str-копи... str-n-копи... str-кат.. str-стыр... блин!
Каждый раз, как сажусь за программу на С - нифига их вспомнить не могу...
И каждый раз скачиваю из сети: Функции для работы со строками в C++ (Си-строки)
и каждый раз забываю эти стыр.. блин...
_________________ iLavr
|
21 Feb 2015 16:46 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22606 Location: Silicon Valley
|
да там-то как раз всё просто и логично, в отличие от std::string...
|
21 Feb 2015 17:02 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
ну могли б разнообразить имена чтоб запомнилось?
Меня всегда убивает, что strncpy(AppName, Buff, nlen); - в нормальных языках
этo: substr или substring.
И я это никогда не помню... и каждый раз вспоминаю, и качаю блин эти
Функции для работы со строками в C++ (Си-строки)
_________________ iLavr
|
21 Feb 2015 17:52 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22606 Location: Silicon Valley
|
неа - strncpy это тоже самое, что и strcpy (копирование строк), но с ограничением на количество передаваемых символов
|
21 Feb 2015 18:09 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Это верно, но ведь strncpy(AppName, Buff+start, nlen); - в нормальных языках
этo: substr или substring, накрайняк mid$().
Я про то и говорю, что название функции не напоминает смыслом то, что надо
сделать - взять подстроку от строки.
_________________ iLavr
|
21 Feb 2015 18:18 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22606 Location: Silicon Valley
|
вообще-то твои "Buff+start" к strncpy никакого отношения не имеют - т.е. ты просто используешь расширенную функцию копирования с ограничением длины для выделения подстроки в строке, но это не значит, что strncpy - это функция выделения подстроки...
P.S. это всё равно, что сказать скажем, что printf("%i",a+b) - это функция печати суммы двух чисел и по хорошему её стоило бы назвать print_a_plus_b
|
21 Feb 2015 18:40 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Это ты подходишь чисто формально, а я говорю о том, что ЯВУ на то и ЯВУ, чтобы названия функций
были близкими к " человеческим".
Но я могу тебе ту же фразу развернуть и жестче:
Эх и гавенный язычишка этот С: ни тебе substr, ни substring, ни даже mid$(), накрайняк, нет, как в нормальных языках, вот и приходится выдрюпываться посредством strncpy(AppName, Buff+start, nlen);. Убогий набор работы со строками!
Вкурил суть?
_________________ iLavr
|
21 Feb 2015 19:29 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22606 Location: Silicon Valley
|
strcpy = string copy - вполне человеческие названия
P.S strncpy = string copy with no more than N characters...
|
21 Feb 2015 19:47 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А ему про Ерёму, а он всё про Фому!
Как говорила моя бабушка... ну ладно... а то ты обидишься...
Как я говорил ранее:
И это я ещё мягко говорю, а почитать форумы, где рьяные апологеты С рекомендуют это
делать в цикле посимвольно, так можно и жестче прокомментировать!
_________________ iLavr
|
21 Feb 2015 21:11 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22606 Location: Silicon Valley
|
ну дык тож "ассемблер высокого уровня" - всё надо делать самому
|
21 Feb 2015 21:14 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Дак вот в том-то и суть: если мы посмотрим во что это компилируется:
что substr, что substring, что даже mid$(), а также strncpy(AppName, Buff+start, nlen);,
то ведь это практически одно и то же!
Вот я и говорю - что удобные названия на суть не влияют, а на удобство работы влияют очень!
Я тебе скажу, что люди, осваивающие С впервые - просто впадают от этого в ступор!
Тем паче, что в заголовочных файлах С определено столько синонимов - можно было бы
и строковые функции "обернуть" во что-то привычное!
Есть же (HIWORD) & (LOWORD) - а это всего лишь "обертки"...
_________________ iLavr
|
21 Feb 2015 21:29 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22606 Location: Silicon Valley
|
Вырезал в отдельный топик т.к. тот топик был всё-таки про C++ и про Линуса
|
21 Feb 2015 21:57 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
для меня, в ц#, было несколько дико отсутствие мемцпи(стрцпи етк).
мемцпи - меморикопи
стрцпи - стрингкопи
согласен, что несколько сжато. Но нажимать 1к5 кнопок чтоп набрать string.SubString(...) это не для меня
|
22 Feb 2015 00:27 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
substring, как мне кажется, во всех языках занимается не копированием, а созданием новой строки из существующей. В отличии от str[n]cpy, которая тупо копирует из существующего буфера в, опять же, существующий.
Т.е. если реализовать substring функцию на Це, то надо будет заюзать calloc. И соответственно substring будет возвращать указатель на вновь созданную строку.
Итого mem[n]cpy и substring совершенно разные вещи.
|
22 Feb 2015 00:27 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А что, мемцпи(стрцпи етк) запретили в WinApi?
Я мемцпи() юзал в таких языках, где про него просто не думал никто.
Если язык позволяет вызов функции WinApi, мемцпи() не является проблемой.
А насчет "оберток" для строковых функций - я давно думаю написать им привычные обертки,
чтобы не мучатся всякий раз, но каждый раз - некогда.
Да я на С, собственно, программлю, когда нужны вот такие трюки, как с МСТ_НООК-длл,
которые никак не реализовать на ЯВУ.
То есть - нечасто.
_________________ iLavr
|
22 Feb 2015 09:14 |
|
|