Может ли это быть связанно с тем, что такие литералы хранятся в стеке или куче? Я знаю что литералы хранятся в смежных ячейках памяти (т.е., в соседних), а где хранятся эти смежные ячейки?
Отслеживать
67.7k 209 209 золотых знаков 76 76 серебряных знаков 218 218 бронзовых знаков
задан 30 дек 2022 в 12:34
3 1 1 бронзовый знак
Это связано с тем, что char — это число от -128 до 127 (чаще всего), и пытаться запихнуть в него строковый литерал нет никакого смысла
30 дек 2022 в 12:45
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Это связано с тем, что в объявлении
char s = «some_text»;
вы выделяете ровно 1 (прописью: один) байт для хранения всего текста. Что, очевидно, не работает.
char s = ‘s’;
Отслеживать
ответ дан 30 дек 2022 в 12:45
215k 15 15 золотых знаков 117 117 серебряных знаков 228 228 бронзовых знаков
Строки программы имеют тип массива букв char [ ] и они хранятся в коде программы, которая защищена от изменения.
Поэтому ваша запись
Так бегает охранник в сабвей серф #Shorts
char *s = «smth»;
создаёт переменную с типом указателя на первую букву константной строки и чтобы не было удивления от ошибок краха памяти надо объявлять её так :
char const * s = «smth» ; s [ i ] — там буква с типом char const
или указателем на сам массив :
char const ( * p ) [ ] = ( char const ( * ) [ ] ) smth» ; ( * p ) [ i ] — там буква с типом char const
и чтобы была возможность изменять данную строку нужно создавать её копию так :
char s [ ] = «smth» ; s [ 0 ] = ‘S’ ; — новую строку можно менять, заменяя буквы
char st [ 60 ] ; strncpy ( st , «smth» , 59 ) ; st [ 59 ] = ‘