89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
1

Как записать указатель со строковым литералом в массив

09.12.2016, 21:44. Показов 693. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, что - то застрял на такой вот штуке. (Стыдно... =()
C++
1
2
3
char *str = "String Literal";
printf("%s", str);
str[0] = 't';
Как обойти read only область. Как литерал превратить в массив?

Ибо такое вроде как валидно:
C++
1
2
3
char str[] = "String Literal";
printf("%s", str);
str[0] = 't';
Добавлено через 21 минуту
Сделал через "кучу" - вроде работает. Что скажете. так можно?
C++
1
2
3
4
5
6
7
char* str1 = "Hello World!";
    int len=strlen(str1);
    char *mod = new char[len];
 
    for (int i=0; i<len; i++)
        mod[i] = str1[i];
delete[] mod;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2016, 21:44
Ответы с готовыми решениями:

Возвращаемое значение функции - указатель на массив. КАК это записать?
Функция заполняет массив. например (кусок проги) .... int mas; int fun() { заполнила...

Знак @ перед строковым литералом
Для чего используется знак @ перед строковым литералом? string text = @&quot;text.txt&quot;;

Как записать константный указатель на указатель
Добрый вечер. Вот данная запись говорит. Указатель на константный указатель типа Int. int *...

Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив.
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Условие:Реализовать 3 функции,...

3
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
09.12.2016, 21:51 2
Jman,
Каждый литерал зашит намертво в программу (все эти символы между двойными кавычками находятся прямо в исполняемом коде программы после ее обработки компилятором).

Это можно проверить, поковырявшись отладчиком в бинарнике (исп. файле) программы.
Просматривая оперативную память можно увидеть строки текста.
Таким образом литерал является статическим константным объектом.

Как записать указатель со строковым литералом в массив


В этом коде
C++
1
char *str = "String Literal";
ты запоминаешь адрес этого намертво закрепленного объекта.

Таким образом ты пытаешься поменять (наверное) не данные, а исполняемый код, что недопустимо.
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
09.12.2016, 21:56  [ТС] 3
Я переписал данный литерал в динамический массив, так правильно?
0
nd2
3434 / 2813 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
10.12.2016, 07:03 4
Цитата Сообщение от Jman Посмотреть сообщение
Я переписал данный литерал в динамический массив, так правильно?
И так правильно (строковый литерал копируется в массив):
Цитата Сообщение от Jman Посмотреть сообщение
C++
1
char str[] = "String Literal";
Цитата Сообщение от Jman Посмотреть сообщение
Я переписал данный литерал в динамический массив, так правильно?
И так можно, но памяти нужно больше выделять (под '\0' добавить), и копировать с помощью strcpy():
C++
1
2
3
4
5
6
    char* str1 = "Hello World!";
    int len = strlen(str1);
    char *mod = new char[len + 1];
    strcpy(mod, str1);
    // что-то делаем со строкой mod
    delete[] mod;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2016, 07:03
Помогаю со студенческими работами здесь

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая...

Массив с строковым типом данных от 1 до 10000
Мне нужен массив с строковым типом данных от 1 до 10000 стринг не подходит какой тип подойдет

Как записать адрес в указатель во время работы программы
Нужно чтобы пользователь ввел адрес в сам указатель: int *ptr; cin &gt;&gt; ptr; error C2678:...

Как записать данные в переменную, не имея указатель на неё?
Столкнулся с такой проблемой. Сейчас изучаю c по книге K&amp;R. Нашёл там пример применения библиотеки...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru