Сишные функции работы со строками

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Вот что я ненавижу в С - так это строковые функции... :(

Ну что за убожество! Str-копи... str-n-копи... str-кат.. str-стыр... блин! :o

Каждый раз, как сажусь за программу на С - нифига их вспомнить не могу...
И каждый раз скачиваю из сети: Функции для работы со строками в C++ (Си-строки)
и каждый раз забываю эти стыр.. блин... :-?
iLavr
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

да там-то как раз всё просто и логично, в отличие от std::string...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:да там-то как раз всё просто и логично, в отличие от std::string...
ну могли б разнообразить имена чтоб запомнилось?

Меня всегда убивает, что strncpy(AppName, Buff, nlen); - в нормальных языках
этo: substr или substring.

И я это никогда не помню... и каждый раз вспоминаю, и качаю блин эти
Функции для работы со строками в C++ (Си-строки)
iLavr
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

неа - strncpy это тоже самое, что и strcpy (копирование строк), но с ограничением на количество передаваемых символов ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Это верно, но ведь strncpy(AppName, Buff+start, nlen); - в нормальных языках
этo: substr или substring, накрайняк mid$().

Я про то и говорю, что название функции не напоминает смыслом то, что надо
сделать - взять подстроку от строки.
iLavr
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:Это верно, но ведь strncpy(AppName, Buff+start, nlen); - в нормальных языках
этo: substr или substring, накрайняк mid$().

Я про то и говорю, что название функции не напоминает смыслом то, что надо
сделать - взять подстроку от строки.
вообще-то твои "Buff+start" к strncpy никакого отношения не имеют - т.е. ты просто используешь расширенную функцию копирования с ограничением длины для выделения подстроки в строке, но это не значит, что strncpy - это функция выделения подстроки...

P.S. это всё равно, что сказать скажем, что printf("%i",a+b) - это функция печати суммы двух чисел и по хорошему её стоило бы назвать print_a_plus_b :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Это ты подходишь чисто формально, а я говорю о том, что ЯВУ на то и ЯВУ, чтобы названия функций
были близкими к "человеческим".

Но я могу тебе ту же фразу развернуть и жестче:
Эх и гавенный язычишка этот С: ни тебе substr, ни substring, ни даже mid$(), накрайняк, нет,
как в нормальных языках, вот и приходится выдрюпываться посредством strncpy(AppName, Buff+start, nlen);.
Убогий набор работы со строками!


Вкурил суть? :lol:
iLavr
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

strcpy = string copy - вполне человеческие названия :)

P.S strncpy = string copy with no more than N characters...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

А ему про Ерёму, а он всё про Фому! :o

Как говорила моя бабушка... ну ладно... а то ты обидишься... :wink:

Как я говорил ранее:
Эх и гавенный язычишка этот С: ни тебе substr, ни substring, ни даже mid$(), накрайняк, нет,
как в нормальных языках, вот и приходится выдрюпываться посредством strncpy(AppName, Buff+start, nlen);.
Убогий набор работы со строками!
И это я ещё мягко говорю, а почитать форумы, где рьяные апологеты С рекомендуют это
делать в цикле посимвольно, так можно и жестче прокомментировать! 8)
iLavr
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

ну дык тож "ассемблер высокого уровня" - всё надо делать самому ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Дак вот в том-то и суть: если мы посмотрим во что это компилируется:
что substr, что substring, что даже mid$(), а также strncpy(AppName, Buff+start, nlen);,
то ведь это практически одно и то же! :o

Вот я и говорю - что удобные названия на суть не влияют, а на удобство работы влияют очень!
Я тебе скажу, что люди, осваивающие С впервые - просто впадают от этого в ступор!
Тем паче, что в заголовочных файлах С определено столько синонимов - можно было бы
и строковые функции "обернуть" во что-то привычное!

Есть же (HIWORD) & (LOWORD) - а это всего лишь "обертки"...
iLavr
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Вырезал в отдельный топик т.к. тот топик был всё-таки про C++ и про Линуса ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Post by DimkaM »

для меня, в ц#, было несколько дико отсутствие мемцпи(стрцпи етк).

мемцпи - меморикопи
стрцпи - стрингкопи

согласен, что несколько сжато. Но нажимать 1к5 кнопок чтоп набрать string.SubString(...) это не для меня
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Post by DimkaM »

substring, как мне кажется, во всех языках занимается не копированием, а созданием новой строки из существующей. В отличии от str[n]cpy, которая тупо копирует из существующего буфера в, опять же, существующий.
Т.е. если реализовать substring функцию на Це, то надо будет заюзать calloc. И соответственно substring будет возвращать указатель на вновь созданную строку.

Итого mem[n]cpy и substring совершенно разные вещи.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

DimkaM wrote:для меня, в ц#, было несколько дико отсутствие мемцпи(стрцпи етк).
А что, мемцпи(стрцпи етк) запретили в WinApi?
Я мемцпи() юзал в таких языках, где про него просто не думал никто.
Если язык позволяет вызов функции WinApi, мемцпи() не является проблемой.

А насчет "оберток" для строковых функций - я давно думаю написать им привычные обертки,
чтобы не мучатся всякий раз, но каждый раз - некогда.

Да я на С, собственно, программлю, когда нужны вот такие трюки, как с МСТ_НООК-длл,
которые никак не реализовать на ЯВУ.
То есть - нечасто.
iLavr