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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.79
Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
#1

Как объявить строковую переменную? - C++

27.09.2011, 12:47. Просмотров 4578. Ответов 21
Метки нет (Все метки)

которой в процессе выполнения программы будут присваиваться разные значения. Вот это:
C++
1
char* a = "VasiaPupkin"
компилятор объявляет устаревшим: warning: deprecated conversion from string constant to 'char'
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2011, 12:47     Как объявить строковую переменную?
Посмотрите здесь:

Как определить строковую переменную? - C++
Првиет всем! Ситуация такая.Мне нужно что бы введенная строка загрузилась в переменную.А далее эта переменная была переданна в...

Как добавить несколько символов в строковую переменную? - C++
как добавить несколько символов в строковую переменную?

Как в классе записать возвращаемую строковую переменную? - C++
как в классе записать возвращаемую строковую переменную? программа работает но ругается warning class_string.h #include...

Как объявить переменную? - C++
curl_easy_setopt(curl, CURLOPT_URL, url); Как объявить переменную? Этот код находится внутри класса.

Как объявить переменную AProperties в с++ - C++
Подскажите пожалуйста как объявить переменную AProperties в с++? procedure TForm1.FormCreate(Sender: TObject); var AProperties:...

Как объявить булеву переменную - C++
с++ 6.0 - Выражения _Bool Программирую на с++ 6.0 и немогу обьявить переменную типа _Bool b = true; помогите разобраться.

Как объявить переменную глобально? - C++
здравствуйте, в книге шилдта есть такой код #include <iostream> using namespace std; void func1(); void func2(); int count;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
681 / 583 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
27.09.2011, 13:17     Как объявить строковую переменную? #2
C++
1
const char* a = "VasiaPupkin";
Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
27.09.2011, 13:26  [ТС]     Как объявить строковую переменную? #3
Спасибо, это я видел в гугле.
Но а - не константа. В процессе выполнения ей будут присваиваться другие значения, "PetiaShliapkin", "MoishaRabinovich", и т.д.
sandye51
программист С++
681 / 583 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
27.09.2011, 13:41     Как объявить строковую переменную? #4
а где написано что 'а' - константа?
она указывает на константу, не путай
http://liveworkspace.org/code/f11a0c...6d556fb76ab616
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
27.09.2011, 13:59     Как объявить строковую переменную? #5
Voroshek, в C используются обычные символьные массивы и функции для работы с ними, в C++ класс std::string
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,411
27.09.2011, 14:28     Как объявить строковую переменную? #6
char* a = (char*)"VasiaPupkin";
-=ЮрА=-
Заблокирован
Автор FAQ
27.09.2011, 14:44     Как объявить строковую переменную? #7
sandye51, мрак
Цитата Сообщение от sandye51 Посмотреть сообщение
const char* a = "VasiaPupkin";
Voroshek, вот так сделайте char a[] = "VasiaPupkin"; - этим вы объявили стрковую переменную в 12 символов char a[12]; - аналог
sandye51, впредь если хочешь так писать
Цитата Сообщение от sandye51 Посмотреть сообщение
a = "VasiaPupkin";
то пиши char * a = (char *)"VasiaPupkin";Хотя бы пытайся неявное преобразование делать...

Добавлено через 59 секунд
Цитата Сообщение от sandye51 Посмотреть сообщение
а где написано что 'а' - константа?
- да ты сам её константной строкой сделал
Цитата Сообщение от sandye51 Посмотреть сообщение
const char* a = "VasiaPupkin";
!
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
27.09.2011, 14:48     Как объявить строковую переменную? #8
Цитата Сообщение от kravam Посмотреть сообщение
char* a = (char*)"VasiaPupkin";
Это попытка обмануть компилятор, не более.
-=ЮрА=-
Заблокирован
Автор FAQ
27.09.2011, 15:02     Как объявить строковую переменную? #9
и вообще sandye51, задане звучит так
Цитата Сообщение от Voroshek Посмотреть сообщение
Как объявить строковую переменную?
которой в процессе выполнения программы будут присваиваться разные значения
привожу код и ответ компилятора

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
 
int main()
{
    char a[] = "VasiaPupkin";
    a[3] = '!';//Всё ок
    const char * b = "VasiaPupkin";
    b[3] = '!';//Ну да надеемся))) const в жизни не позволит этого сделать
    return 0;
}
b[3] = '!';
d:\мои документы\юра\личное\projects\strings\strings1.cpp(9) : error C2166: l-value specifies const object

Добавлено через 10 минут
Цитата Сообщение от rangerx Посмотреть сообщение
Это попытка обмануть компилятор, не более.
- ну не совсем так, со строкой тоже можно работать(откомпилируйте в Release код ниже),
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    char a[] = "VasiaPupkin";
    std::cout<<a<<"\r\n";
    a[3] = '!';//Всё ок
    std::cout<<a<<"\r\n";
 
    char * c = (char *)"VasiaPupkin";
    std::cout<<c<<"\r\n";
    c[3] = '!';
    std::cout<<c<<"\r\n";
    getch();
    return 0;
}
VasiaPupkin
Vas!aPupkin
VasiaPupkin
Vas!aPupkin

Впринципе у себя юзал именно такой вариант для руссификации консоли методом CharToOem
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
27.09.2011, 15:23     Как объявить строковую переменную? #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ну не совсем так, со строкой тоже можно работать
Можно. Как с константой
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Впринципе у себя юзал именно такой вариант для руссификации консоли методом CharToOem
Можешь смело всё переписать, потому что так делать нельзя(имею в виду запись, естественно. Если указатель используется только для чтения, то ничего особо страшного здесь нет).
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,411
27.09.2011, 15:24     Как объявить строковую переменную? #11
Цитата Сообщение от rangerx Посмотреть сообщение
Это попытка обмануть компилятор, не более.
соглашусь с оговоркой: если чел знает, что он делает- пусть делает. Это С, в конце концов.
-=ЮрА=-
Заблокирован
Автор FAQ
27.09.2011, 15:32     Как объявить строковую переменную? #12
kravam, мне для себя интересно почему в дебаге
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
char * c = (char *)"VasiaPupkin";
* * * * std::cout<<c<<"\r\n";
* * * * c[3] = '!';
вызывает exception а в Release отрабатывает?
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
VasiaPupkin
Vas!aPupkin
VasiaPupkin
Vas!aPupkin
Добавлено через 2 минуты
Цитата Сообщение от rangerx Посмотреть сообщение
Можешь смело всё переписать, потому что так делать нельзя(имею в виду запись естественно.
- да нет там указатели на блок памяти не изменяются
C++
1
2
3
char * s = (char *)"русский";
CharToOem(s,s);
printf("%s",s);
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,411
27.09.2011, 15:42     Как объявить строковую переменную? #13
Работаю в Dev-Cpp, debag и release для меня незнакомые понятия. Там один режим.
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,908
27.09.2011, 17:28     Как объявить строковую переменную? #14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- да нет там указатели на блок памяти не изменяются
Адрес естественно остаётся тем же, но то, что по этому адресу расположено меняется. Т.е. ты, в приведённом участке кода, изменяешь значение строкового литерала, что в свою очередь ведёт к UB(undefined behavior).
-=ЮрА=-
27.09.2011, 17:54
  #15

Не по теме:

Цитата Сообщение от rangerx Посмотреть сообщение
изменяешь значение строкового литерала
- и что из этого?
Чем это отлично от doubla val = 5;val = 3;Приложением пользуюсь уже 3-й год(по правде пишу) и никаких
Цитата Сообщение от rangerx Посмотреть сообщение
UB
не наблюдалось....
Думаю основной ответ по топику уже дан постов так 10 назад так что предлагаю не спорить попусту а потратить наше с тобой вермя действительно на помощь по форуму

rangerx
27.09.2011, 19:49
  #16

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- и что из этого?
Чем это отлично от doubla val = 5;val = 3;
см. здесь
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
никаких UB не наблюдалось....
http://codepad.org/2GYrF77e

Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
27.09.2011, 22:44  [ТС]     Как объявить строковую переменную? #17
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Voroshek, вот так сделайте char a[] = "VasiaPupkin"; - этим вы объявили стрковую переменную в 12 символов char a[12]; - аналог
=ЮрА=, спасибо, конечно, но я не зря использовал указатель. Если задать переменную в 12 символов, я не смогу в дальнейшем присвоить ей, например, "MoishaRabinovich" (я уточнял это в сообщении №3)
Да, если это важно, пишу на с++, ось Линукс Минт, собираю в консоли.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.09.2011, 23:20     Как объявить строковую переменную? #18
Цитата Сообщение от Voroshek Посмотреть сообщение
пишу на с++
И что же вас ограничивает в использовании std::string, который динамически изменяет свой размер (абсолютно прозрачно для программиста) и имеет разные вкусности в виде, например, различных перегруженных операторов?
Voroshek
6 / 6 / 1
Регистрация: 22.08.2011
Сообщений: 75
27.09.2011, 23:21  [ТС]     Как объявить строковую переменную? #19
Угу, разобрался, спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2011, 09:43     Как объявить строковую переменную?
Еще ссылки по теме:

Как объявить переменную в классе? - C++
Доброго времени суток. Как правильно объявить переменную в private: Делаю так: private: std::vector&lt;double&gt;* parameters = new...

Как объявить глобальную переменную в Dev-C++ 4.9.9.2? - C++
Попробовал написать из справочника по С++ такую программу: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; void...

Не могу вывести строковую переменную - C++
Привет :) Писал программу, обнаружил что не могу вывести строковую переменную таким образом: int b=0; cin&gt;&gt;b; string a; if...

Как объявить 10 значную переменную такой как 9876543210 - C++
Какой тип переменной используется для объявления 10 значной переменной такой как 9876543210? пробовал double, но компилятор выдаёт...

Текст итема предать в строковую переменную - C++
Есть главное окно(диалог), в нем listBox Как по нажатию пункта меню(обработчик его в файле MainApp.cpp) текст выделенного итема предать в...


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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
28.09.2011, 09:43     Как объявить строковую переменную? #20
Цитата Сообщение от Voroshek Посмотреть сообщение
=ЮрА=, спасибо, конечно, но я не зря использовал указатель. Если задать переменную в 12 символов, я не смогу в дальнейшем присвоить ей, например, "MoishaRabinovich" (я уточнял это в сообщении №3)
Да, если это важно, пишу на с++, ось Линукс Минт, собираю в консоли.
char * a = (char *)"Vasia pupkin";
a = (char *)"MoishaRabinovich";

На досуге скомпилируйте и запустите код, а потом пишите что вы можете сделать а что нет
Код С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <conio.h>
using namespace std;
 
int main()
{
    char * c = (char *)"VasiaPupkin";
    std::cout<<c<<"\r\n";
    c = (char *)"Masha Malinovich";
    std::cout<<c<<"\r\n";
    getch();
    return 0;
}

Не по теме:

PS:Больше помогать вам не буду....

Yandex
Объявления
28.09.2011, 09:43     Как объявить строковую переменную?
Ответ Создать тему
Опции темы

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