Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
#1

Что происходит когда например "char* g="fdgag";"? - C++

26.11.2012, 21:11. Просмотров 392. Ответов 8
Метки нет (Все метки)

Сабж. Я понял создается динамический массив с помощью malloc() и поэтому к нему не обратится таким образом: g[2]. Я прав?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2012, 21:11     Что происходит когда например "char* g="fdgag";"?
Посмотрите здесь:
C++ Что происходит при char *str = ""?
C++ IntelliSense: несовместимые типы операндов ("char" и "const char *")
C++ Не открывается библиотека 'stdafx.h' и "char" не работает с параметром "char*"
C++ Заданный словарь слов. Найти в нем слова-палиндромы, то есть такие, которые одинаково читаются слева направо и наоборот, например, "АННА", "ШАЛАШ"
Сокращение слов (например, "напряженность"- "напр-ть") C++
невозможно преобразовать параметр 1 из "const char [8]" в "LPCWSTR" C++
C++ Преобразовать параметр из "WCHAR [260]" в "const char *"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
26.11.2012, 21:17     Что происходит когда например "char* g="fdgag";"? #2
Цитата Сообщение от NEW_NAME Посмотреть сообщение
создается динамический массив с помощью malloc()
Нет. Создается указатель на константный строковый литерал.
Цитата Сообщение от NEW_NAME Посмотреть сообщение
поэтому к нему не обратится таким образом: g[2]
На чтение можно обращаться.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
26.11.2012, 21:20     Что происходит когда например "char* g="fdgag";"? #3
g - указатель на константный текстовый массив.
Читать g[2] можно:
char c=g[2];
Писать - нельзя:
g[2]='a';// ошибка исполнения.
nshell32gmail
5 / 5 / 1
Регистрация: 26.11.2012
Сообщений: 19
26.11.2012, 21:21     Что происходит когда например "char* g="fdgag";"? #4
Вроде нет. Если ты не выделяешь память под массив явно, т.е. не используешь ни malloc(), ни new, то есть два выхода:
1. Если использовать таблицу строк, тогда пишешь так:
const char *arr = "my text";
Это создаст в файле программы в таблице строк строку "my text", свяжет указатель arr на константу по адресу этой строки и ее уже изменять во время выполнения программы, очевидно, будет нельзя нельзя.
2. Иначе выделяешь память для строки явно:
char *arr = new char[7]
или в стиле С
char *arr = (char*)malloc(sizeof(char)*7);
и в обоих случаях используешь strcpy(arr,"string\0");
--
вот как у тебя написано - так делать нельзя, но добросовестный компилятор сделает как в первом случае и выкинет warning, что инфа по указателю может измениться, а там уже непредсказуемые последствия, т.к. все что не запрещено, то разрешено и ты НАВЕРНЯКА рано или поздно захочешь изменить значение по указателю.
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
26.11.2012, 21:38  [ТС]     Что происходит когда например "char* g="fdgag";"? #5
Почему кстати для этой штуки не работает _msize()? Для new char[4] к примеру работает.
BuPy7
Нет ТЗ - давай досвидания
748 / 345 / 30
Регистрация: 01.12.2011
Сообщений: 2,042
26.11.2012, 23:18     Что происходит когда например "char* g="fdgag";"? #6
Цитата Сообщение от NEW_NAME Посмотреть сообщение
создается динамический массив с помощью malloc()
Если вы программируете на C++, то от malloc, calloc, realloc - нужно отказаться. т.к. эти функции наследованные от C. В языке C++, для этих целей, используются функции new и delete.
nshell32gmail
5 / 5 / 1
Регистрация: 26.11.2012
Сообщений: 19
27.11.2012, 01:01     Что происходит когда например "char* g="fdgag";"? #7
Цитата Сообщение от Metallnote Посмотреть сообщение
Если вы программируете на C++, то от malloc, calloc, realloc - нужно отказаться. т.к. эти функции наследованные от C. В языке C++, для этих целей, используются функции new и delete.
Полностью согласен. Если использовать malloc() для класса, то память выделяется, но конструктор не вызывается.
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
27.11.2012, 01:05  [ТС]     Что происходит когда например "char* g="fdgag";"? #8
Цитата Сообщение от Metallnote Посмотреть сообщение
Если вы программируете на C++, то от malloc, calloc, realloc - нужно отказаться. т.к. эти функции наследованные от C. В языке C++, для этих целей, используются функции new и delete.
Блин, да я даже не пользовался никогда этим. Меня интересовал механизм по которому создается такая строка как в шапке темы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 01:41     Что происходит когда например "char* g="fdgag";"?
Еще ссылки по теме:
C++ Невозможно преобразовать параметр 2 из "char" в "const char *"
C++ Несовместимые типы операндов "char" и "const char*"
Что делать?(учу C++ и кое что ни понимаю может стоит начать с более "низких языков" например basic) C++
C++ invalid conversion from "const char*" to "char"
C++ Невозможно преобразовать "const char" в "char"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nshell32gmail
5 / 5 / 1
Регистрация: 26.11.2012
Сообщений: 19
27.11.2012, 01:41     Что происходит когда например "char* g="fdgag";"? #9
если в ассемблерном коде хоть что понимаешь и gcc есть - запусти с ключом -S. Получишь ассемблерный листинг. Как строка там оказалась - написал выше.
Yandex
Объявления
27.11.2012, 01:41     Что происходит когда например "char* g="fdgag";"?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru