nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 28 Jun 2017 06:41



Reply to topic  [ 23 posts ]  Go to page 1, 2  Next
Сишные функции работы со строками 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Вот что я ненавижу в С - так это строковые функции... :(

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

Каждый раз, как сажусь за программу на С - нифига их вспомнить не могу...
И каждый раз скачиваю из сети: Функции для работы со строками в C++ (Си-строки)
и каждый раз забываю эти стыр.. блин... :-?

_________________
iLavr


21 Feb 2015 19:46
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15362
Location: New York
Reply with quote
Post 
да там-то как раз всё просто и логично, в отличие от std::string...

_________________
:eugeek: https://twitter.com/Shaos1973


21 Feb 2015 20:02
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
да там-то как раз всё просто и логично, в отличие от std::string...

ну могли б разнообразить имена чтоб запомнилось?

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

И я это никогда не помню... и каждый раз вспоминаю, и качаю блин эти
Функции для работы со строками в C++ (Си-строки)

_________________
iLavr


21 Feb 2015 20:52
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15362
Location: New York
Reply with quote
Post 
неа - strncpy это тоже самое, что и strcpy (копирование строк), но с ограничением на количество передаваемых символов ;)

_________________
:eugeek: https://twitter.com/Shaos1973


21 Feb 2015 21:09
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Это верно, но ведь strncpy(AppName, Buff+start, nlen); - в нормальных языках
этo: substr или substring, накрайняк mid$().

Я про то и говорю, что название функции не напоминает смыслом то, что надо
сделать - взять подстроку от строки.

_________________
iLavr


21 Feb 2015 21:18
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15362
Location: New York
Reply with quote
Post 
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 :)

_________________
:eugeek: https://twitter.com/Shaos1973


21 Feb 2015 21:40
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Это ты подходишь чисто формально, а я говорю о том, что ЯВУ на то и ЯВУ, чтобы названия функций
были близкими к "человеческим".

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


Вкурил суть? :lol:

_________________
iLavr


21 Feb 2015 22:29
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15362
Location: New York
Reply with quote
Post 
strcpy = string copy - вполне человеческие названия :)

P.S strncpy = string copy with no more than N characters...

_________________
:eugeek: https://twitter.com/Shaos1973


21 Feb 2015 22:47
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
А ему про Ерёму, а он всё про Фому! :o

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

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

И это я ещё мягко говорю, а почитать форумы, где рьяные апологеты С рекомендуют это
делать в цикле посимвольно, так можно и жестче прокомментировать! 8)

_________________
iLavr


22 Feb 2015 00:11
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15362
Location: New York
Reply with quote
Post 
ну дык тож "ассемблер высокого уровня" - всё надо делать самому ;)

_________________
:eugeek: https://twitter.com/Shaos1973


22 Feb 2015 00:14
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Дак вот в том-то и суть: если мы посмотрим во что это компилируется:
что substr, что substring, что даже mid$(), а также strncpy(AppName, Buff+start, nlen);,
то ведь это практически одно и то же! :o

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

Есть же (HIWORD) & (LOWORD) - а это всего лишь "обертки"...

_________________
iLavr


22 Feb 2015 00:29
Profile
Admin
User avatar

Joined: 09 Jan 2003 02:22
Posts: 15362
Location: New York
Reply with quote
Post 
Вырезал в отдельный топик т.к. тот топик был всё-таки про C++ и про Линуса ;)

_________________
:eugeek: https://twitter.com/Shaos1973


22 Feb 2015 00:57
Profile WWW
Senior

Joined: 22 Jun 2005 07:35
Posts: 180
Location: МО Россия
Reply with quote
Post 
для меня, в ц#, было несколько дико отсутствие мемцпи(стрцпи етк).

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

согласен, что несколько сжато. Но нажимать 1к5 кнопок чтоп набрать string.SubString(...) это не для меня


22 Feb 2015 03:27
Profile ICQ
Senior

Joined: 22 Jun 2005 07:35
Posts: 180
Location: МО Россия
Reply with quote
Post 
substring, как мне кажется, во всех языках занимается не копированием, а созданием новой строки из существующей. В отличии от str[n]cpy, которая тупо копирует из существующего буфера в, опять же, существующий.
Т.е. если реализовать substring функцию на Це, то надо будет заюзать calloc. И соответственно substring будет возвращать указатель на вновь созданную строку.

Итого mem[n]cpy и substring совершенно разные вещи.


22 Feb 2015 03:27
Profile ICQ
Supreme God
User avatar

Joined: 21 Oct 2009 11:08
Posts: 7777
Location: Россия
Reply with quote
Post 
DimkaM wrote:
для меня, в ц#, было несколько дико отсутствие мемцпи(стрцпи етк).

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

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

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

_________________
iLavr


22 Feb 2015 12:14
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 23 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.