Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
1

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

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

Author24 — интернет-сервис помощи студентам
не дает =\

C++
1
2
static char text[256];
text = "";
error: expression must be a modifiable lvalue
это же не конст, а просто статик, в pawn"е часто пользовался static и ок всё было
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2010, 00:12
Ответы с готовыми решениями:

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

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

Изменение значения переменной через указатель
Дана задача:с помощью указателя увеличить значение переменной b в 3 раза, поменять местами a и c....

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

19
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
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
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:24 4
Owyn, если ты хочешь, чтобы все элементы массива равнялись нулю:
C++
1
memset(text, 0, sizeof(text) / sizeof(text[0]));
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
04.08.2010, 00:27 6
C++
1
2
3
#include <algorithm>
...
std::fill_n(text, 256, '\0');
2
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
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:28 8
Lavroff, при инициализации можно и так. Вообще говоря, глобальные статические переменные инициализируются нулем по умолчанию.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
04.08.2010, 00:29 9
Цитата Сообщение от Lavroff Посмотреть сообщение
Или с чаром такое не прокатит?
Ещё как прокатит. Но неплохо иметь способ обнулять буфер по мере надобности, а не только при инициализации...
1
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 00:31 10
Цитата Сообщение от Owyn Посмотреть сообщение
text[256]:
т.е. 256 делить на один? а что не просто sizeof text
Сегодня ты используешь ANSI строки (один байт на символ), а завтра перейдешь на UNICODE (два байта на символ) и придется тебе все подобные допущения отлавливать. Деление на размер первого элемента не повредит.
1
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 00:36  [ТС] 11
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Сегодня ты используешь ANSI строки (один байт на символ), а завтра перейдешь на UNICODE (два байта на символ) и придется тебе все подобные допущения отлавливать. Деление на размер первого элемента не повредит.
ясно,но я пока могу отличить char от wchar_t
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.08.2010, 00:37 12
Owyn, Одно дело отличить и писать заново) Другое дело просто поменять char на wchar)
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 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
Эксперт С++
2347 / 1720 / 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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
04.08.2010, 01:47 15
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
только чуть поправленный
Ну я вообще за то, чтобы размеры массивов в отдельной переменной или именованной константе хранить. Так в первую очередь самому нагляднее...
0
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
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 12:12 17
Owyn, смотря как посмотреть. С одной стороны memset будет быстрее. С другой строны нам нужно заполнить строку нулевыми символами, которые записываются как '\0' для обычных символов и L'\0' для широких, поэтому с идеологической точки зрения std::fill_n будет предпочтительнее.
0
0 / 0 / 0
Регистрация: 28.05.2009
Сообщений: 64
04.08.2010, 12:43  [ТС] 18
разве
'\0' != 0 != 0x00 ?
0
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
04.08.2010, 13:44 19
Owyn, просмотрел по этому вопросу стандарт, в стандарте явно не оговорено какой код имеет символ терминатор (может плохо смотрел). А если стандарт молчит, то обычно это означает, что реализация отдана на откуп разработчикам компилятора. Поэтому с полной уверенностью утверждать, что терминатор в представлении целого числа является нулем нельзя. Да и вообще для представления символов постарайся использовать только символьные литералы ('a', '2', 'Z' и т.п.).
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.08.2010, 03:57 20
'\0' - это восьмеричный код символа

C
1
2
3
    putchar('\12')
    putchar('\12')
    putchar('\12')
0
05.08.2010, 03:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2010, 03:57
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru