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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
#1

Изменение значения статической переменной - C++

04.08.2010, 00:12. Просмотров 2220. Ответов 19
Метки нет (Все метки)

не дает =\

C++
1
2
static char text[256];
text = "";
error: expression must be a modifiable lvalue
это же не конст, а просто статик, в pawn"е часто пользовался static и ок всё было
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2010, 00:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изменение значения статической переменной (C++):

Объявление статической переменной и статической функции в классе - C++
Добрый вечер, столкнулся с проблемой и не могу решить. Есть класс SavingsAccount и в нем объявлена статическая переменная для процентной...

Изменение значения переменной во время исполнения - C++
Задача: Преобразовать введенный с клавиатуры массив таким образом, чтобы в первой его половине располагались элементы , имевшие нечетный...

Наследование статической переменной - C++
есть класс с статистическим полем я от него "произвожу" два потомка. у всех этик классов будет одно общее поле(переменная) или же у...

Доступ к статической переменной-члену - C++
Всем доброго время суток задали написать программу, в которой доступ к статической переменной-члену осуществляется с помощью статической...

Неожиданное значение в статической переменной - C++
Всем привет! Либо мне надо отдохнуть, либо происходит что-то неведомое... Код int f() { static int b = 3; if(b == 3) ...

Разделение класса со статической переменной в многофайловом проекте - C++
На ровном месте происходят какие-то непонятные чудеса, как будто бы я шаблонный класс объявляю - если реализация класса находится в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
04.08.2010, 00:14 #2
Собсна..

C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    static char text[256];
    strcpy(text, "");
    return 0;
}
Или так.
Изменяем первый эл-т массива.
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    static char text[256];
    *text=' ';
    return 0;
}
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 00:21  [ТС] #3
надо полностью все чары убить в массиве, лучше
C++
1
strcpy(text, "");
или
C++
1
for(int i=0; i<sizeof text; i++){text[i]=0;}
?
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:24 #4
Owyn, если ты хочешь, чтобы все элементы массива равнялись нулю:
C++
1
memset(text, 0, sizeof(text) / sizeof(text[0]));
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
04.08.2010, 00:25 #5
CyBOSSeR, А можно ведь по сути просто char[256]={0}; Или с чаром такое не прокатит? По умолчанию, все элементы становятся нулем вроде как.

Вполне достойно отработало:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
    char x[5]={0};
    for(int i=0;i<5;++i)
        std::cout<<x[i];
    return 0;
}
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
04.08.2010, 00:27 #6
C++
1
2
3
#include <algorithm>
...
std::fill_n(text, 256, '\0');
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 00:27  [ТС] #7
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
sizeof(text) / sizeof(text[0])
text[256]:
т.е. 256 делить на один? а что не просто sizeof text
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:28 #8
Lavroff, при инициализации можно и так. Вообще говоря, глобальные статические переменные инициализируются нулем по умолчанию.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
04.08.2010, 00:29 #9
Цитата Сообщение от Lavroff Посмотреть сообщение
Или с чаром такое не прокатит?
Ещё как прокатит. Но неплохо иметь способ обнулять буфер по мере надобности, а не только при инициализации...
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:31 #10
Цитата Сообщение от Owyn Посмотреть сообщение
text[256]:
т.е. 256 делить на один? а что не просто sizeof text
Сегодня ты используешь ANSI строки (один байт на символ), а завтра перейдешь на UNICODE (два байта на символ) и придется тебе все подобные допущения отлавливать. Деление на размер первого элемента не повредит.
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 00:36  [ТС] #11
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Сегодня ты используешь ANSI строки (один байт на символ), а завтра перейдешь на UNICODE (два байта на символ) и придется тебе все подобные допущения отлавливать. Деление на размер первого элемента не повредит.
ясно,но я пока могу отличить char от wchar_t
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
04.08.2010, 00:37 #12
Owyn, Одно дело отличить и писать заново) Другое дело просто поменять char на wchar)
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.08.2010, 00:39 #13
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
memset(text, 0, sizeof(text) / sizeof(text[0]));
по мне так лучше знать размер массива в отдельной переменной.
C
1
memset(text, 0, size * sizeof(char));
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:50 #14
Хотя нет, я не прав, для функции memset будет беспроблемной конструкция вида:
C++
1
memset(text, 0, sizeof(text));
т.к. ее необходимо знать количество байт, а не символов.
А вообще, я за вариант easybudda, только чуть поправленный для Windows:
C++
1
2
3
4
#include <algorithm>
#include <tchar.h>
 
std::fill_n(text, sizeof(text) / sizeof(text[0]), _T('\0'));
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,608
04.08.2010, 01:47 #15
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
только чуть поправленный
Ну я вообще за то, чтобы размеры массивов в отдельной переменной или именованной константе хранить. Так в первую очередь самому нагляднее...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2010, 01:47
Привет! Вот еще темы с ответами:

Объяснить в чём отличие статической переменной от константы - C++
Чем отличается статическая переменная от константы?

Классы: как из статического метода обратиться к статической переменной класса - C++
Классы: как из статического метода обратиться к статической переменной класса

Подскажите как создать конструктор класса в котором производится инкрементирование статической переменной! - C++
Ребят Всем Добрых Суток!!! Запнулся на создании перегруженного конструктора, компилятор ни как не хочет принимать мой класс - ругается на...

Создать функцию с использованием статической переменной (или переменных), определенной на локальном уровне. - C++
Создать функцию с использованием статической переменной (или переменных), определенной на локальном уровне. Написать функцию Avg (N),...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.08.2010, 01:47
Ответ Создать тему
Опции темы

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