|
Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | (покажи всички)
Тема
|
защо "абвгз" е char*, а не const char*?
|
|
Автор |
zaphod (мракобес) |
Публикувано | 13.01.10 16:33 |
|
все едно 345 да е инт а не конст инт бах мааму!
NE SUTOR ULTRA CREPIDAM
| |
Тема
|
Re: защо "абвгз" е char*, а не const char*?
[re: zaphod]
|
|
Автор |
portal (старо куче) |
Публикувано | 13.01.10 16:50 |
|
Възможно ли е да е заради енкодинга, в смисъл да е сигурно, че ще го "побере"...
Revolution, the only solution,
The armed response of an entire nation
System of a Down P.L.U.C.K.
| |
Тема
|
Re: защо "абвгз" е char*, а не const char*?
[re: zaphod]
|
|
Автор |
Pekoнcтpykтop (дарвинист) |
Публикувано | 13.01.10 17:16 |
|
Верно ли не знаеш?
| |
Тема
|
Re: защо "абвгз" е char*, а не const char*?
[re: Pekoнcтpykтop]
|
|
Автор |
Om_ (eyeful) |
Публикувано | 13.01.10 17:38 |
|
И аз не знам. Ти кажи!
Според мен трябва да е константа.
Обаче асоциацията с инт е тотално погрешна
понеже char* e низ, а не единичкна промелива.
Сега каква беше разликата - имаше значение къде стои const
понеже const char* не е същото като char* const.
В единият случай не се променя адресът, а в другият - записът.
Редактирано от Om_ на 13.01.10 17:43.
| |
Тема
|
Re: защо "абвгз" е char*, а не const char*?
[re: zaphod]
|
|
Автор |
Colombino (програмист) |
Публикувано | 13.01.10 20:58 |
|
По исторически причини. Много код нема да се компилира ако го променят. Нещо повече, навремето това активно се ползваше и литералите се променяха.
В интерес на истината дори не е const char *, а char[6] и можеш да му зимаш sizeof вместо да ползваш strlen.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
Тема
|
Re: защо "абвгз" е char*, а не const char*?
[re: Colombino]
|
|
Автор |
portal (старо куче) |
Публикувано | 13.01.10 22:29 |
|
Колко съм бил далеч от истината :) така е като се вра при ИП (истинските порграмисти ) :)))
Revolution, the only solution,
The armed response of an entire nation
System of a Down P.L.U.C.K.
| |
|
"абвгз" си е константа, кое как сочи към нея е друг въпрос. Май е ундефинед да се ръчка където не си алокейтнал (точен размер компиле или сгоден малок, ама кой го ебе си днешно време така или иначе :).
Teh quk bron fox jums over teh lazy dog...
| |
|
сбъркал си в подписа си "teh" :-P
| |
|
>> "абвгз" си е константа, кое как сочи към нея е друг въпрос.
Глуопсти говориш. Немаш право с неконстантен пойнтер да сочиш към константа без да конст-кастнеш преди това. А в случая можеш. Разрешават ти на честна дума, щото ако се опиташ да присвоиш, в 99% от случаите компилаторът го е сложил в памет дето не можеш да пишеш и гърмиш мъжката.
От друга страна си прав - недефинирано е поведението, но това ние много добре го знаем, не това беше въпросът. Човекът питаше що типът на литерала не е константен, след като литералът е фактическа константа.
Отговорът е, че е пълно със стар код, където има прототип от типа
OldAPI(char *c);
което ще престане да се компилира, щото се ползва така
OldAPI("абвгз");
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
| |
|
очевидно е че е константа, точно затова ме шокира че предадено на функция приемаща променяем чар* минава. ако функцията наистина иска да пипа по стринга си гръмва.
NE SUTOR ULTRA CREPIDAM
| |
|
Страници по тази тема: 1 | 2 | 3 | 4 | 5 | 6 | (покажи всички)
|
|
|