Перейти к содержимому

Как обнулить переменную char c

  • автор:

Обнулить массив char

Не могу обнулить переменную типа char
Доброго времени суток, помогите обнулить переменную, т.к. мой компилятор ругается "E2277 Lvalue.

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

Как перевести массив char[] в char*
Не знаю как перевести массив char в переменную char*

ReadKey или как обнулить char.
Пытаюсь делать игру на pascalABC (Для общего развития) и наткнулся на такую проблему — при нажатии.

Очистить переменную типа char *

После пары раз прогона кода вместо «COM4» начинается добавление «4» вконец строки. Как очистить переменную *rt?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Не могу обнулить переменную типа char
Доброго времени суток, помогите обнулить переменную, т.к. мой компилятор ругается "E2277 Lvalue.

Как сравнить переменную типа char
нужно найти элементы типа char различные от нуля, программу я написал, а вот не получается.

Занести число в переменную, типа char
char a; cin>>a; a=3; Тут при чтении с клавы мы считываем символ , т.е. если я введу 3, то а.

794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1

mappy89, выражение

ЦитатаСообщение от mappy89 Посмотреть сообщение

присваивает rt адрес строки «COM», которая является константой.

ЦитатаСообщение от mappy89 Посмотреть сообщение

strcat(rt,itoa(port,temp1,10));

strcat пишет в эту константу. Так нельзя. Создайте отдельный массив char, причём с тем размером, чтобы туда т очно поместилась ожидаемая результирующая строка, в нём и кувыркайтесь. А константы не трогайте, они вам ничего не сделали 🙂

Кроме того, это похоже на билдеровский код. В vcl, если мне не изменяет склероз, есть такая замечательная штука, как IntToString. Поищите в хелпе.

Эксперт С++

4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5

ЦитатаСообщение от mappy89 Посмотреть сообщение

Как очистить переменную *rt?
Вам надо очистить переменную temp1:

*temp1 = '\0';

А c rt все проще. Пишите rt = «. «, каждый раз rt будет иметь адрес соответствующей константы из области памяти read-only

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Передать переменную типа char по ссылке
доброго времени суток. помогите над очень простым задание из одной книги. Создайте функцию.

Ввод символов в переменную типа char
Почему после ввода больше 1-го символа выбивает default? #include <iostream> #include <conio.h>.

Как вернуть переменную типа char * из функции
Как вернуть переменную типа char * из функции в которую передаю string. Вот моя функция: char.

Вывести с помощью printf переменную типа char*
Добрый день! Подскажите: есть переменная "message" типа char* Если пишу: printf("\n%*d %c ".

Удалить переменную в теле программы Си

Я объявляю статическую переменную counter в начале программы в двух первых функциях она нужна, а в третьей она не нужна. Можно ли ее как-то удалить?

Перемещено beastie из general

Caesium137
10.05.19 10:54:27 MSK
1 2 →

Во-первых, в development. Во-вторых, Это что, клуб изучения Си?

XMs ★★★★★
( 10.05.19 10:56:30 MSK )

Статическую нет, выделяй динамически, если переменная — экземпляр большой структуры, если это какой-нибудь int, то ваще забей.

Не, поизвращаться на самом деле можно, это же си, но ты что-то делаешь не так. Зачем тебе её удалять и что ты вообще под этим понимаешь?

DELIRIUM ☆☆☆☆☆
( 10.05.19 10:56:32 MSK )
Последнее исправление: DELIRIUM 10.05.19 10:58:55 MSK (всего исправлений: 1)

Ответ на: комментарий от XMs 10.05.19 10:56:30 MSK

Да ладно тебе агриться, с каких пор тут вопросы по сям запрещены?

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:00:22 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 10:56:32 MSK

Чтобы осталось больше памяти

Caesium137
( 10.05.19 11:00:26 MSK ) автор топика

Я объявляю статическую переменную counter в начале программы

Интересно, что ты понимаешь под «объявляю» и «статическую». Как ты понимаешь это физически?

Deleted
( 10.05.19 11:00:32 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:00:32 MSK

static int counter

Caesium137
( 10.05.19 11:01:00 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:00:26 MSK

Сколько памяти она занимает и сколько у тебя есть? У тебя что, микроконтроллер?

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:01:32 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:01:32 MSK

Да, микроконтроллер Arduino

Caesium137
( 10.05.19 11:02:01 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:01:00 MSK

Ты экономишь 4 байта?

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:02:12 MSK )
Ответ на: комментарий от Caesium137 10.05.19 11:01:00 MSK

Вопрос явно не понят. Что происходит физически?

Deleted
( 10.05.19 11:02:22 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:02:12 MSK

А почему бы и нет?

Caesium137
( 10.05.19 11:02:53 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:02:53 MSK

Потому, что твоё последнее сообщение весит больше))

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:03:46 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:03:46 MSK

Ну, так можно или нет?

Caesium137
( 10.05.19 11:04:27 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:04:27 MSK

Подсказываю: «объявление» — это выделение памяти, где произойдёт это выделение с учётом static?

Deleted
( 10.05.19 11:06:40 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:06:40 MSK
Caesium137
( 10.05.19 11:07:27 MSK ) автор топика
Ответ на: комментарий от Deleted 10.05.19 11:06:40 MSK

Это вообще возможно?

Caesium137
( 10.05.19 11:08:31 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:07:27 MSK

Фактически в «теле» процесса. Пока процесс не завершён, ты ничего назад не получишь.

Deleted
( 10.05.19 11:08:49 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:08:49 MSK

Значит, так сделать нельзя?

Caesium137
( 10.05.19 11:11:17 MSK ) автор топика
Ответ на: комментарий от Caesium137 10.05.19 11:11:17 MSK

Как мне известно, нельзя. Физически не получится.

Deleted
( 10.05.19 11:12:14 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:08:49 MSK

Ну переписать область в сегменте данных можно.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:12:18 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:12:18 MSK

Можешь дать пример кода?

Caesium137
( 10.05.19 11:12:58 MSK ) автор топика
Ответ на: комментарий от DELIRIUM 10.05.19 11:12:18 MSK

Ну переписать область в сегменте данных можно.

Deleted
( 10.05.19 11:13:12 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:13:12 MSK

Так он так и не ответил, что он понимает под освободить. Он видимо хочет переиспользовать память, переписать это и означает.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:15:34 MSK )
Ответ на: комментарий от Caesium137 10.05.19 11:12:58 MSK

Нет, гугли. И учти, что это будет системно-зависимо.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:16:15 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:15:34 MSK
Deleted
( 10.05.19 11:16:43 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:16:43 MSK

Ну тогда ой) вот что я нашёл на со

Assuming you are using gnu tools (gcc, binutils) if you look at the linker scripts the embedded folks use like the gba developers and microcontroller developers using roms (yagarto or devkit-arm for example). In the linker script they surround the segments of interest with variables that they can use elsewhere in their code. For rom based software for example you specify the data segment with a ram AT rom or rom AT ram in the linker script meaning link as if the data segment is in ram at this address space, but also link the data itself into rom at this address space, the boot code then copies the .data segment from the rom to the ram using these variables. I dont see why you couldnt do the same thing to have the compiler/linker tools tell you where stuff is then runtime use those variables to grab the data from memory and save it somewhere to hybernate or shut down and then restore that data from wherever. The variables you use to perform the restore of course should not be part of the .data segment or you trash the variables you are using to restore the segment.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:18:54 MSK )

Я поставил стул, чтобы сидеть, когда читаю и ем, но когда сплю, он не нужен. Можно ли его как-то выкинуть?

anonymous
( 10.05.19 11:20:27 MSK )
Ответ на: комментарий от anonymous 10.05.19 11:20:27 MSK

Не совсем корректная аналогия, стул ты можешь выкинуть хоть в окно в любой момент.

DELIRIUM ☆☆☆☆☆
( 10.05.19 11:22:24 MSK )
Ответ на: комментарий от DELIRIUM 10.05.19 11:22:24 MSK

стул ты можешь выкинуть хоть в окно в любой момент.

Дополним аналогию. Стул заставлен со всех сторон шкафами. )

Deleted
( 10.05.19 11:23:59 MSK )
Ответ на: комментарий от Deleted 10.05.19 11:23:59 MSK

Шкафы можно отодвинуть)

Как удалить символ char из его же массива

Всем привет. Есть такая задача : В Входном файле дается никнейм, нам надо, чтобы в таблице сортировки по имени этот ник стоял как можно ниже, притом удалить можно только один символ. Мой код:

ifstream in("input.txt"); ofstream out("output.txt"); string str; char ch[str.size()],temp; in >> str; strcpy(ch, str.c_str()); temp=ch[0]; for(int i=0;i temp) < delete ch[i]; break; >else temp=ch[i]; > string str2=ch; out  

Мы смотрим, если второй символ ниже в алфавите первого, мы первый удаляем Компилятор указывает на одну единственную ошибку - delete ch[i]; Eroor:type 'char' argument given to 'delete', expected pointer Как быть?

Отслеживать
задан 21 сен 2018 в 20:01
Влад Ковальчук Влад Ковальчук
73 2 2 серебряных знака 8 8 бронзовых знаков

Ну во-первых char ch[str.size()] массивы с автоматическим хранением не являются стандартной фичей языка. Во-вторых delete ch[i]; некорректно, так как аргумент не является указателем, выделенным при помощи new . Под "удалить" тут явно понимается переместить символы после i -го на один назад.

21 сен 2018 в 20:15
ясно сказано, что ожидается указатель. Вы пытетесь удалять значение
21 сен 2018 в 20:16
приведите пример входных и выходных данных, а то ничего не понятно
21 сен 2018 в 20:29
@Hovsepyan smith-smth
21 сен 2018 в 20:33
практически удаляете самый меньший символ в строке?
21 сен 2018 в 20:36

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

delete не из той оперы.

Ваше delete ch[i]; следует развернуть в

for(int j = i+1; ch[j-1] = ch[j]; ++j); 

Или воспользоваться memmove() .

Отслеживать
ответ дан 22 сен 2018 в 3:44
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков

Слушайте, а что вы сдесь вообще делаете? Вот у вас есть некая переменная str, которая, как можно заключить из метода c_str() имеет тип std::string. Так зачем вы используете массив char? Не поймите меня неверно, я люблю Си, но вот зачем использовать функции из cstring в перемешку с классом string? Тем более что вы это делаете не верно. И раз уж у вас вопрос с меткой с++, то порекомендую сделать все через string (и правильно). Как то так:

ifstream in("input.txt"); ofstream out("output.txt"); std::string str; // сдесь вы вообще брали у str size, который равен 0 на данный момент in >> str; // две строки сдесь вообще не нужны - у вас дублирование данных // далее вы в вопросе указали что нужно удалить первый символ, если он меньше второго, но почему то обходите всю строку, вместо того, чтобы сделать так: if (str[0] < str[1]) str.erase(str.begin()); else str.erase(1); out  

Обратите внимание, что не только код сократился, но и количество переменных тоже сократилось. Ровно до одной.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *