372

Курсы создания компьютерных игр на C/C++ ( Часть 6 )

Серия Курсы создания компьютерных игр на C++
Для самых-самых начинающих программистов :] Часть 5.5 - http://pikabu.ru/story/_3453747
Курсы создания компьютерных игр на C/C++ ( Часть 6 )
Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

добрые люди, объясните пожалуйста человеческим языком что это означает:

const char* WeaponName_None = "None";


Значит ли это, что в указателе "WeaponName_None" хранится адрес памяти где должна быть сохранена строка "None", но никакой переменной с таким значеним нет? Т.е. имеется область памяти занятая данными, но не имеющая имени? Зачем?

раскрыть ветку (11)
Автор поста оценил этот комментарий

Так и есть :)

Это указатель на строковую константу неимеющую имени :)

Это просто удобный способ создать несколько глобальных константных строк.


Если интересно, можно вот тут почитать про такие тонкости:

http://www.cyberforum.ru/blogs/18334/blog97.html

раскрыть ветку (10)
Автор поста оценил этот комментарий

прочёл. спасибо. Как я понял, такой финт ушами только для строковых литералов нужен, да?

раскрыть ветку (9)
Автор поста оценил этот комментарий
По сути да :) Да и только пока для нашего обучения ))

Перейдем на С++ и ООП будем использовать std::string объекты :)

раскрыть ветку (8)
Автор поста оценил этот комментарий

а почему здесь нельзя использовать string? статья хорошая, спасибо.

раскрыть ветку (7)
Автор поста оценил этот комментарий
да пользуйтесь, кто ж запрещал? Это ж просто уже несколько другой уровень :)
раскрыть ветку (6)
Автор поста оценил этот комментарий

а в чем суть использования строк именно таким образом? для какой-то оптимизации?

раскрыть ветку (5)
Автор поста оценил этот комментарий

Суть в том, что std::string - это класс (точнее даже конкретная версия шаблонного типа - std::basic_string<char>), который сам по себе кое-что умеет. Например, сам управляет памятью - сам где-то хранит char-буфер, изменяет, копирует и даже освобождает. Есть кучка вспомогательных методов, вроде поиска подстроки. К этому буферу мы напрямую даже прикоснуться не имеем права - управляем только через итераторы и методы класса.

http://www.cplusplus.com/reference/string/string/


А в Си широко используются строки с нулем на конце. То есть тупой сырой массив, где логический конец строки обозначается следующим за ней символом '\0' (от него и до конца буфера все, включая другие нуль-символы, считается мусором и игнорируется строковыми функциями).


const char cstr[] = "САБАКА-КУСАКА";
char *str = (char*)malloc((strlen(cstr) + 1)*sizeof('Ю'));
strcpy(str, cstr);
// С|А|Б|А|К|А|-|К|У|С|А|К|А|\0


const cstr2[] = "Молоко";

strcpy(str, cstr2);
// М|о|л|о|к|о|\0|К|У|С|А|К|А|\0
printf("%s", str); // Молоко

Резюме: zero-terminated string оперировать проще, т.к. это обыкновенный массив. std::string - это хитромудрая штука со своими нюансами и использованием С++ во все поля, поэтому ТС предлагает ньюби научиться пользоваться языком постепенно.

раскрыть ветку (4)
Автор поста оценил этот комментарий

Развернутый ответ :)

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий
Иллюстрация к комментарию
Автор поста оценил этот комментарий

спасибо большое за такой ответ =)

пример я шушуть не понял, но в целом прояснилось.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Пример о том, как работает терминальный нуль в С-строках.


1) Выделяем достаточно памяти, копируем туда данные из литерала

2) В уже имеющуюся строку копируем данные из другого литерала

3) Любуемся, как printf игнорирует любые данные после первого же '\0'.


Кстати, часто у начинающего случается ситуация, когда он велосипедит строковые операции нуль-символа не оказывается в строковом буфере. Тогда printf выйдет за границы и пойдет бродить по памяти, попутно сбрасывая свой пусть в stdout, где среди каракуль могут попадаться интересные строки, которые не были затерты после другого процесса.


Пожалуйста)

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества