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

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

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

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++ Изменение значения переменной во время исполнения
Создать функцию с использованием статической переменной (или переменных), определенной на локальном уровне. C++
Различие глобальной и глобальной статической переменной C++
Классы: как из статического метода обратиться к статической переменной класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:24     Изменение значения статической переменной #4
Owyn, если ты хочешь, чтобы все элементы массива равнялись нулю:
C++
1
memset(text, 0, sizeof(text) / sizeof(text[0]));
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:28     Изменение значения статической переменной #8
Lavroff, при инициализации можно и так. Вообще говоря, глобальные статические переменные инициализируются нулем по умолчанию.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.08.2010, 00:29     Изменение значения статической переменной #9
Цитата Сообщение от Lavroff Посмотреть сообщение
Или с чаром такое не прокатит?
Ещё как прокатит. Но неплохо иметь способ обнулять буфер по мере надобности, а не только при инициализации...
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
04.08.2010, 00:37     Изменение значения статической переменной #12
Owyn, Одно дело отличить и писать заново) Другое дело просто поменять char на wchar)
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 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++
 Аватар для CyBOSSeR
2293 / 1663 / 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
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.08.2010, 01:47     Изменение значения статической переменной #15
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
только чуть поправленный
Ну я вообще за то, чтобы размеры массивов в отдельной переменной или именованной константе хранить. Так в первую очередь самому нагляднее...
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'));
оно настолько лучше мемсета?.. а то доп инклюды включать итд.. +_+
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 12:12     Изменение значения статической переменной #17
Owyn, смотря как посмотреть. С одной стороны memset будет быстрее. С другой строны нам нужно заполнить строку нулевыми символами, которые записываются как '\0' для обычных символов и L'\0' для широких, поэтому с идеологической точки зрения std::fill_n будет предпочтительнее.
Owyn
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 12:43  [ТС]     Изменение значения статической переменной #18
разве
'\0' != 0 != 0x00 ?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 13:44     Изменение значения статической переменной #19
Owyn, просмотрел по этому вопросу стандарт, в стандарте явно не оговорено какой код имеет символ терминатор (может плохо смотрел). А если стандарт молчит, то обычно это означает, что реализация отдана на откуп разработчикам компилятора. Поэтому с полной уверенностью утверждать, что терминатор в представлении целого числа является нулем нельзя. Да и вообще для представления символов постарайся использовать только символьные литералы ('a', '2', 'Z' и т.п.).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2010, 03:57     Изменение значения статической переменной
Еще ссылки по теме:

C++ Преобразование значения переменной (long) через функцию в значения структуры
Подскажите как создать конструктор класса в котором производится инкрементирование статической переменной! C++
C++ Неожиданное значение в статической переменной

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

Или воспользуйтесь поиском по форуму:
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.08.2010, 03:57     Изменение значения статической переменной #20
'\0' - это восьмеричный код символа

C
1
2
3
    putchar('\12')
    putchar('\12')
    putchar('\12')
Yandex
Объявления
05.08.2010, 03:57     Изменение значения статической переменной
Ответ Создать тему
Опции темы

Текущее время: 23:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru