|
массивы символов = строка
|
|||
---|---|---|---|
#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&gotonew=1&tid=2017440]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
9ms |
get first new msg: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 392ms |
0 / 0 |