0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
|
|
1 | |
Стоит ли изучить программирование в стиле С?14.05.2014, 10:00. Просмотров 2307. Ответов 33
Метки нет Все метки)
(
Стоит ли изучит программирование в стиле С?
В книге написано про строки в стиле С и настоятельно рекомендуется не использовать их при программирование. Так как я не хочу нагрузит себя не нужной информацией ( ибо за краткий срок много чего надо изучит), возникает вопрос. На столько актуальны сроки в стиле С? Надо ли изучать их или можно пропустит?
0
|
|
14.05.2014, 10:00 | |
Что стоит изучить, что перейти от консольных приложений к оконным Какие книги лучше всего изучить чтобы хорошо изучить с++ Gnu Octave написана на C++, хочу изучить программирование для Octave, с чего начать |
|
Почетный модератор
![]() 5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
|
|
14.05.2014, 10:14 | 2 |
0
|
Ушел с форума
![]() |
|
14.05.2014, 21:21 | 3 |
А что там изучать ? Вот строка из символов, вот завершающий ноль в конце.
Если вы принимаете строку в N символов, то должны выделить N+1 места в буфере, чтобы не было переполнения. Если память под буфер выделяется в динамической памяти, за ней нужно следить и освобождать, когда она больше не нужна. Вот и вся наука.
0
|
66 / 63 / 21
Регистрация: 01.05.2014
Сообщений: 247
|
|
14.05.2014, 21:32 | 5 |
Приветствую!
( "Убеждённому" - Большое Спасибо ( за - ? Не знаю, но Полезные "Вещи" открылись ! ) - с моей точки зрения: - Если Вы задумываетесь о программировании - только с Точки зрения Друзей; - ( - ух, ну-надо-же...) - прочее... -- Ни надо. --- (идите варить Метал - проку будет больше )
0
|
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
|
|
15.05.2014, 02:44 [ТС] | 6 |
Убежденный, советую к прочтению прежде чем ответит на такой вопрос.
Язык программирования C ++_Вводный курс Стенли Б. Липпман. Стр 154. Символная строка в стиле С. Это очень отличается от обычного массива которого вы описали. (Кроме нолика) Добавлено через 2 минуты В принципе строка в стиле С тот же самый массив но в языке С. Хотя бы посмотрите раздел где создана тема.
0
|
32 / 32 / 19
Регистрация: 13.07.2011
Сообщений: 138
|
|
15.05.2014, 02:52 | 7 |
Altair42, А чем вам не устраивает ответ Убежденный, все правильно он написал: строка в стиле С это обычный массив лишь с нулем-терминатором в конце.
0
|
3239 / 2047 / 350
Регистрация: 24.11.2012
Сообщений: 4,897
|
|
15.05.2014, 04:54 | 8 |
Убежденный, вот так лихо взяли и послали Вас в книжки для начинаюших)
И чем же? Я даже не поленился - книжку открыл. Там написано то же самое, только с примерами и занимает 5 страниц.
0
|
Ушел с форума
![]() |
|
15.05.2014, 19:52 | 9 |
Назовите хотя бы одно принципиальное отличие.
На мой взгляд, C-строка отличается от массива примерно так же, как std::string от std::vector<T_Char>. То есть, практичеки никак.
0
|
15.05.2014, 21:23 | 10 |
Причем, это сделано намеренно, чтобы избежать накладных расходов, связанных с поддержанием отдельного строкового типа. Никаких "строк" в C нет, только "джентльменская договоренность" о специальным образом сформированных символьных массивах.
0
|
![]() ![]() |
|
15.05.2014, 23:25 | 11 |
Договорённость вовсе не джентельменская, а закреплённая в стандарте в той части, где речь идёт о стандартных функциях (без которых строка как понятие особого смысла не имеет)
Добавлено через 36 секунд А ещё в той части, где описана семантика строкового литерала
0
|
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
|
|
16.05.2014, 12:29 [ТС] | 12 |
Разница в том что создание и работа с обычным массивом куда проще чем работа с строкой в стиле C. Я так понял чтоб работать с сторокой в стиле С надо знать как это делается на языке С. По этому и создал тему. Важно ли учиться строит массивы и работать с ними в языке С?
Я прочел эти 5 страницы и понял только одно. Без знание языка С ( как минимум того что относится к массивам) мне не как не понят как работа с строкой в стиле С. ( Читать код одно но создать его и работать с ним, это уже совсем другое.)Если С++ дает возможность работать с массивами не используя С то я не вижу смысла изучать их на языке С. Но так как я "начинаю первые шаги в этом мире". Мне надо знать я прав или нет. Убежденный, По вашему класс string не отличается от класса vector? Их соединяет только то что они оба хранит данные как массив и позволяют работать с ними лучше чем массив позволяет. Но как бы string не может работать как vector - со всеми возможными типами. ( Или есть способ чтоб заставит string работать как vector без всякого там гемороя?) Добавлено через 4 минуты Прошу вас не превратит тему в "священные войны". Мне надо только знать. Обязательно изучать строки в стиле С? Или хватит знаний массива? Если я начну изучать строки в стиле С мне придется изучать язык С. Чтобы полностью понят что к чему.
0
|
30 / 16 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
|
16.05.2014, 13:13 | 13 |
std::vector<T_Char>. Не обладает свойством copy on write. Если на у нас несколько строк создано через =, то они указывают все на один объект. При изменении строки через одну из переменных создаётся копия не меняющая другие переменные. При изменении строки при единственном хозяине копия не создаётся. Такого механизма нет в vector так, что это не одно и тоже. Хотя одно из полей string действительно vector из шаблонного basicString насколько помню, который можно забить char или wchar.
Добавлено через 4 минуты Обязательно изучать строки в стиле С? Или хватит знаний массива? Если я начну изучать строки в стиле С мне придется изучать язык С. Чтобы полностью понят что к чему. Нету в Си строк, в том смысле, что это понятие полностью искусственное и сделано из последовательности char с последним равным 0. И то, что надо знать кроме этого может быть несколько функций для работы с такими последовательностями char, чтобы не писать свои велосипеды.
0
|
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
|
|
16.05.2014, 14:30 [ТС] | 14 |
Archi0, друг мой мне нужен ответ да или нет
![]() Вы меня еще больше путаете. Есть в Си строк, массивов или что там еще, мне не интересно. В книге по которому я учу С++ строкам в стиле С уделено достаточно внимание но с указанием - не использовать. Я прочел все что там написано на счет этого понял только то что используемые ( команды или что еще там) с языка Си. А значит чтоб понят ка работает строки в стиле С надо знать как работают эти команды. То что они по сути массив я знаю. Цитирую из книги (Липпман ). "Стандартная библиотека С предоставляет набор функций для работы с строками в стиле С" Есть вариант этой библиотеки для С++ - cstring. Но так как сама библиотека на С не имею понятие как можно использовать эту библиотеку без знаний С ( в принципе можно но при использование будет слишком много ошибок и недопонимание которых не смогу компенсировать не зная С.). Добавлено через 21 минуту Мне только надо знать. На сколько актуальны сегодня строки в стиле С. Ибо использовать цикл чтоб копировать один массив другому мне проще чем запомнит strcpy () Я так понял что тут 2 слово string + copy. Только что заметил. Но не уверен что я прав. Зная что там смесь 2 слов запомнит strcpy() проще чем запомнит какой та набор не связанных букв ( прежде так его видел). И сколько же таких "наборов букв" в библиотеке cstring? С моим то пониманием вещей можно заблудится среди этих наборов букв. Мне пришлось 3 раза посмотреть в книгу чтоб написать strcpy() пока не понял что там 2 слово. Теперь я просто вспоминаю string + copy, ибо понимаю что означают эти слова(это к тому то я не могу запомнит как есть мне надо понят как сделано).
0
|
30 / 16 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
|
16.05.2014, 14:39 | 16 |
О том и речь, что без библиотеки это всего лишь последовательность char, если вам всего лишь экзамен сдать и в нём не будет вопросов по этому, то можно и не учить потеряете только возможность читать чужой код использующий их. String имеет все подобные функции, что были просто для последовательности char. Отсутствие длины плохо сказывается на некоторых алгоритмах, особенно, если использовать в цикле функции из Си библиотеки, которые постоянно заново мерят строку (если это надо в их реализации), а единственный способ избавится от этого написать свою функцию работающую с массивом char. Так же вас не будет волновать вопрос, что прибавив к строке новую нужно заботится, а хватит ли места в памяти (подобные ошибки делали даже в книгах забывая прибавить 1 к malloc), потому что вектор сам все сделает за вас.
0
|
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
|
|
16.05.2014, 14:45 [ТС] | 17 |
Нуу я что та не вижу тут мухи. я задал простой вопрос получил объяснение и споры.
Tulosba, можно узнать зачем если есть более простые способы написать тот же код? А я хотел не мучат себя с ними, этот стил ужасно сложный для меня. Добавлено через 4 минуты Archi0, мне не надо сдавать эгзамен я хочу научится программированию. Чтоб читать код не надо умет писать программу на этом языке или в стиле того программиста. Я к тому что пригодится ли мне этот стил.
0
|
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
|
|
16.05.2014, 14:53 | 18 |
Для некоторых случаев удобно использовать string, для некоторых - char*. Все зависит от специфики задачи. Да и как уже сказали - нечего там учить. За то время, пока существует эта тема, запомнить
все что нужно можно было 10 раз. Ну, названия функциям даны не просто так (вы это уже заметили). Естественно, на первых порах может и не запоминаться - все познается на практике. И только. Напишешь несколько десятков раз код с использованием того же strcpy, и запомнишь, для чего он нужен, как пишется и какие принимает параметры. Да и гугл все таки есть, найти название нужной функции несложно, если она существует... Все это при условии, что это не просто ради зачета, а действительно хочется чему-либо научится. Тогда стоит задуматься, а нужно ли пытаться программировать, если это сложно и неинтересно?) Потому что дальше будет только сложнее)
0
|
30 / 16 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
||||||
16.05.2014, 14:57 | 19 | |||||
Чтобы не сидеть часами думая где ошибка в Си надо понимать к чему приводят ошибки в памяти и как с этой памятью работать char как один байт в этом может пригодится для более простого программирования можно посмотреть в сторону C#. Я плюсы использую только там где надо добиться экстремальной скорости п этому использую его чаще как Си с небольшими улучшениями. Ниже пример как программа может интерпретировать память при выходе за границы массива.
0
|
:)
![]() 4765 / 3259 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
16.05.2014, 14:57 | 20 |
Несмотря на название темы, основном момент Вы уделили почему-то именно строкам. А это как раз "муха".
Если Вы собрались писать на C++, рано или поздно всё равно придется залезать в более низкоуровневые части. Поэтому Си тут будет хорошим подспорьем, а так же ассемблер, знание архитектуры компа и прочее. Я не говорю, что обязательно надо знать это всё на зубок, но ознакомиться точно не помешает.
0
|
16.05.2014, 14:57 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. C++ в функциональном стиле: как писать в стиле C#/LINQ (без дополнительных библиотек)? Какие библиотеки стоит изучить?
Какие языки стоит изучить? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |