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

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

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

char *st="String" - C++

15.02.2012, 00:58. Просмотров 587. Ответов 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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2012, 00:58     char *st="String"
Посмотрите здесь:

C++ Невозможно преобразовать "const char" в "char"
Как избавиться от "deprecated conversion from string constant to ‘char*’" C++
C++ cannot convert "char *" to "char"....
C++ Ошибка: "invalid conversion from char* to char"
C++ invalid conversion from "const char*" to "char"
"const char" в "int" C++
C++ C++ ошибка "Cannot convert 'char *' to char"
C++ Класс "Человек", информация о поле: char или int?
Ошибка со string: "идентификатор "string" не определен" C++
C++ Несовместимые типы операндов "char" и "const char*"
C++ Ошибка C3863 тип массива "char [40]" является неназначаемым

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

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

Не по теме:

опоздал)

easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,490
15.02.2012, 01:58     char *st="String" #4
Цитата Сообщение от Shtrich Посмотреть сообщение
char *st="String";
По большому счёту вот это уже не правильно. Правильно было бы
C
1
const char * st = "String";
Yandex
Объявления
15.02.2012, 01:58     char *st="String"
Ответ Создать тему
Опции темы

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