Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
#1

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

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

не дает =\

C++
1
2
static char text[256];
text = "";
error: expression must be a modifiable lvalue
это же не конст, а просто статик, в pawn"е часто пользовался static и ок всё было

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2010, 00:12
Ответы с готовыми решениями:

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

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

Изменение значения переменной через заданное время
Всем привет!! Кто знает как можно заделать так что бы значения переменной...

Наследование статической переменной
есть класс с статистическим полем я от него "произвожу" два потомка. у всех...

Неожиданное значение в статической переменной
Всем привет! Либо мне надо отдохнуть, либо происходит что-то неведомое... Код...

19
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 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;
}
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;}
?
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:24 #4
Owyn, если ты хочешь, чтобы все элементы массива равнялись нулю:
C++
1
memset(text, 0, sizeof(text) / sizeof(text[0]));
1
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 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;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
10029 / 5952 / 1486
Регистрация: 25.07.2009
Сообщений: 11,251
04.08.2010, 00:27 #6
C++
1
2
3
#include <algorithm>
...
std::fill_n(text, 256, '\0');
2
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
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:28 #8
Lavroff, при инициализации можно и так. Вообще говоря, глобальные статические переменные инициализируются нулем по умолчанию.
1
easybudda
Модератор
Эксперт CЭксперт С++
10029 / 5952 / 1486
Регистрация: 25.07.2009
Сообщений: 11,251
04.08.2010, 00:29 #9
Цитата Сообщение от Lavroff Посмотреть сообщение
Или с чаром такое не прокатит?
Ещё как прокатит. Но неплохо иметь способ обнулять буфер по мере надобности, а не только при инициализации...
1
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:31 #10
Цитата Сообщение от Owyn Посмотреть сообщение
text[256]:
т.е. 256 делить на один? а что не просто sizeof text
Сегодня ты используешь ANSI строки (один байт на символ), а завтра перейдешь на UNICODE (два байта на символ) и придется тебе все подобные допущения отлавливать. Деление на размер первого элемента не повредит.
1
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 00:36  [ТС] #11
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Сегодня ты используешь ANSI строки (один байт на символ), а завтра перейдешь на UNICODE (два байта на символ) и придется тебе все подобные допущения отлавливать. Деление на размер первого элемента не повредит.
ясно,но я пока могу отличить char от wchar_t
0
ForEveR
В астрале
Эксперт С++
7995 / 4754 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.08.2010, 00:37 #12
Owyn, Одно дело отличить и писать заново) Другое дело просто поменять char на wchar)
0
fasked
Эксперт С++
4978 / 2557 / 241
Регистрация: 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));
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 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'));
0
easybudda
Модератор
Эксперт CЭксперт С++
10029 / 5952 / 1486
Регистрация: 25.07.2009
Сообщений: 11,251
04.08.2010, 01:47 #15
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
только чуть поправленный
Ну я вообще за то, чтобы размеры массивов в отдельной переменной или именованной константе хранить. Так в первую очередь самому нагляднее...
0
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 11:37  [ТС] #16
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Хотя нет, я не прав, для функции 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'));
оно настолько лучше мемсета?.. а то доп инклюды включать итд.. +_+
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 12:12 #17
Owyn, смотря как посмотреть. С одной стороны memset будет быстрее. С другой строны нам нужно заполнить строку нулевыми символами, которые записываются как '\0' для обычных символов и L'\0' для широких, поэтому с идеологической точки зрения std::fill_n будет предпочтительнее.
0
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 12:43  [ТС] #18
разве
'\0' != 0 != 0x00 ?
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 13:44 #19
Owyn, просмотрел по этому вопросу стандарт, в стандарте явно не оговорено какой код имеет символ терминатор (может плохо смотрел). А если стандарт молчит, то обычно это означает, что реализация отдана на откуп разработчикам компилятора. Поэтому с полной уверенностью утверждать, что терминатор в представлении целого числа является нулем нельзя. Да и вообще для представления символов постарайся использовать только символьные литералы ('a', '2', 'Z' и т.п.).
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
05.08.2010, 03:57 #20
'\0' - это восьмеричный код символа

C
1
2
3
    putchar('\12')
    putchar('\12')
    putchar('\12')
0
05.08.2010, 03:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2010, 03:57

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

Функция с использованием статической переменной
Создать функцию с использованием статической переменной (или переменных),...

Ошибка в объявлении статической переменной
Знакомлюсь со статическими переменными в ООП, первая программа, ошибки в строке...


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

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

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