Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
Добрый всем день. Я понимаю, что кто-то сейчас скажет , что это полный анахронизм, но всё-таки. Разбирая классику Керригана столкнулся с таким нюансом : если я вот таким образом объявляю строковой массив и тут же его инициализирую : Код: plaintext 1. Код: plaintext 1. (или вот так char *s = "test\0";) как я понимаю в этом случае автоматически происходит определение длины массива(строки). для первой объявляется массив длиной 4, а для второй 5. Но если я хочу скажем (конечно, это не хорошо ) увеличить строку s , например сделав так: Код: plaintext 1. 2. 3. 4. 5. 6. то мало того , что строка s начнет добавляться символами, так с какого-то момента пострадает ещё и строка t , её символы тоже с какого-то момента начнут правится на 'g'. Вопрос в следующем : я верно понимаю , что "мне повезло" и ячейки массивов волшебным образом зарезервировались почти подряд : сначала массив s, а потом через некоторое количество байт и массив t и поэтому и происходит правка массива g? я почему спрашиваю : в учебнике с указателями в главе 5.5. дается следующая инициализация : char amessage[]="now is the time"; char *pmessage[]="now is the time"; а потом в домашке требуется написать функцию strcat(s,t), которая добавляет к строке s строку t. так вот из логики теоретического материала хочется инициализацию сделать именно как дается в главе 5.5 Но сделать я должен что-то вроде этого : Код: plaintext 1. Код: plaintext 1. Верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 12:14 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
andron81я вот таким образом объявляю строковой массив и тут же его инициализирую : Код: sql 1. Ты это нашёл у Кернигана или из пальца высосал? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 12:24 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov andron81я вот таким образом объявляю строковой массив и тут же его инициализирую : Код: sql 1. Ты это нашёл у Кернигана или из пальца высосал? 50/50 у Керригана вот так : Код: plaintext 1. это страшное преступление с моей стороны , что я добавил '\0' ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 12:35 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
andron81это страшное преступление с моей стороны Это признание в том, что ты книгу читал по диагонали, не используя мозг. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 12:46 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov andron81это страшное преступление с моей стороны Это признание в том, что ты книгу читал по диагонали, не используя мозг. хорошо , признаю . мой косяк, обратить внимание надо. запомнил , однако : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. на мою проблему это не сильно влияет ? сумничал, обозвал недоумком, но по делу дальше гордыня не позволяет что-то сказать. это пожалуй самая худшая ветка со всего сайта. собрание гениев - троллей . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 13:09 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
andron81на мою проблему это не сильно влияет ? Сильно. Попробуй sizeof(). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 13:10 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
andron81, Ты зря тут добавляешь нулевой символ '\0'. Он добавляется "автоматически". Вот тут: Код: plaintext 1. Размер массива пять символов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 13:41 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
andron81, А вот тут в массиве четыре символа и нулевого символа в конце массива нет . Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 13:44 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov andron81на мою проблему это не сильно влияет ? Сильно. Попробуй sizeof(). да соглашусь, обратить внимание важно. на ус намотаю то есть если делаю так : Код: plaintext 1. 2. 3. или так : Код: plaintext 1. 2. 3. то всё тождественно. Я верно понимаю, что в подобных задачах из Керригана обязательно лимитировать длину строки ? и если она будет увеличиваться , то её надо резервировать по максимуму. либо так : char s[]=" 100 пробелов "; либо char s[100]=""; а подобные вещи char s[]="test\0"; воспринимаются как массив не 4 символа , а 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 13:55 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
petrav andron81, Код: plaintext 1. а вот это как раз неправильно ! длина такой строки не понять какая будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 13:58 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
andron81 petrav andron81, Код: plaintext 1. а вот это как раз неправильно ! Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 13:59 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
andron81длина такой строки А это и не строка. Это массив символов. Внезапно, но в Си вообще нет строк. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 14:02 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
petrav andron81 пропущено... а вот это как раз неправильно ! Почему? ну например уже потому что strlen(s); отработает неадекватно. она как я понимаю ориентируется на маркер '\0' Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 14:03 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
andron81 petrav пропущено... Почему? ну например уже потому что strlen(s); отработает неадекватно. она как я понимаю ориентируется на маркер '\0' Код: plaintext 1. 2. Конечно, потому что это уже не строка, а массив символов. А до этого был массив символов содержащий строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 14:08 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
petrav andron81 пропущено... ну например уже потому что strlen(s); отработает неадекватно. она как я понимаю ориентируется на маркер '\0' Код: plaintext 1. 2. Конечно, потому что это уже не строка, а массив символов. А до этого был массив символов содержащий строку. ну юридически в общем смысле да. Верно ! я не прав. но в данном контексте подразумевались всё же строки. Ладно, понял. спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 14:12 |
|
||
|
массивы символов = строка
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. короче, юзай C++ и string. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2020, 14:54 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39953712&tid=2017440]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 290ms |
| total: | 437ms |

| 0 / 0 |
