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

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

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

char *st="String" - C++

15.02.2012, 00:58. Просмотров 640. Ответов 3
Метки нет (Все метки)

C++
1
2
3
4
5
void main()
{   
    char *st="String";
    st[1]='1';
}
Есть ли ошибка в третьей строчке.
И если да, то где именно хранится эта строка, и почему она доступна только для чтения.
Если нет, то почему работает вот такой код:
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <conio.h>
void main()
{   
    char *st="asd";
    std::cout<<st[1];
    _getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2012, 00:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос char *st="String" (C++):

Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" - C++
string s = &quot;555 44 55 66&quot;;//размер строки заранее неизвестен char* p = strtok(s.c_str(), ' '); не нравится такое...

error C2664: strcmp: невозможно преобразовать параметр 1 из "char (*)[20]" в "const char *" - C++
for(int i = 0; i&lt; 5; i++) { wr_struc (list); if (strcmp(&amp;list.Sostav,osn_sostav)==0 &amp;&amp; strcmp(&amp;list.MestoVkomande,attack)==0...

Как избавиться от "deprecated conversion from string constant to ‘char*’" - C++
Здравствуйте. У меня компилятор пишет: _.cpp:15: warning: deprecated conversion from string constant to ‘char*’ _.cpp:16:...

Ошибка при компиляции "Cannot convert `std::string' to `const char*" - C++
Подскажите пожалуйста.Компилятор указывает на 13-ой позиции на ошибку типа: cannot convert `std::string' to `const char* for argument `1'...

Функция isspace и тип string: Не существует подходящей функции преобразования из "std::string" в "int" - C++
Добрый день! Я только начинаю изучать язык c++ по книге &quot;Язык программирования С++. Базовый курс 5-е изд 2014(Стэнли Б. Липпман)&quot;. ...

Не открывается библиотека 'stdafx.h' и "char" не работает с параметром "char*" - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;cstring&gt; using namespace std; int one(char fam) //...

3
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
15.02.2012, 01:14 #2
"String" - это литерал( константа, фиксированное значение), т.е. это
C++
1
st[1]='1';
ошибка.
Такой литерал хранится в статической памяти, которая формируется при компиляции.
Если нет, то почему работает вот такой код:
Потому что в данном случае st[1] рассматривается как rvalue.
Это чтение, а не запись.
1
Jupiter
Каратель
Эксперт С++
6558 / 3979 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.02.2012, 01:18 #3
"String" - этот строковый литерал - константа, компилятор располагает его в области доступной только для чтения, в 3-й строке 1-го листинга(или в 5-й строке 2-го листинга) создается указатель который указывает на эту константу, тоесть ты в 4-й строке 1-го листинга пытаешься изменить константу, а это невозможнно! В 6-й строке 2-го листинга, изменения константы не происходит ибо там она исппользуется только для чтения.

Не по теме:

опоздал)

1
easybudda
Модератор
Эксперт CЭксперт С++
9681 / 5631 / 954
Регистрация: 25.07.2009
Сообщений: 10,808
15.02.2012, 01:58 #4
Цитата Сообщение от Shtrich Посмотреть сообщение
char *st="String";
По большому счёту вот это уже не правильно. Правильно было бы
C
1
const char * st = "String";
0
15.02.2012, 01:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2012, 01:58
Привет! Вот еще темы с ответами:

IntelliSense: несовместимые типы операндов ("char" и "const char *") - C++
привет всем! при таком коде: void main() { ifstream fin; ofstream fout; fin.open(&quot;input.txt&quot;); ...

Несовместимые типы операндов "char" и "const char*" - C++
В чем проблема?

Невозможно преобразовать параметр 2 из "char" в "const char *" - C++
Ошибка strcpy: невозможно преобразовать параметр 2 из &quot;char&quot; в &quot;const char *&quot; //удаления из первой строки всех символов, встречающихся...

Error C2440: return: невозможно преобразовать "const char *" в "const char (&)[6]" - C++
Вроде все правильно а все равно не работает. Подскажите в чем ошибка #include &lt;iostream&gt; template&lt;typename T&gt; inline const T...


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

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

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