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

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

Войти
Регистрация
Восстановить пароль
 
h8er
15 / 15 / 5
Регистрация: 20.11.2013
Сообщений: 92
#1

после цикла while символьный массив обнуляется? - C++

01.12.2013, 00:28. Просмотров 247. Ответов 8
Метки нет (Все метки)

Собственно сабж. Подскажите, в чем проблема
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int RemoveChar(char *_str, int _strt, int _amt)
{
    int i = 0;
#ifdef CHECKING 
    while(*_str++) i++;      <- После цикла массив пустой
    if(i < _amt) return -1;
#endif
 
    for(i = 0; i < _amt; i++, _strt++)
    {
          *(_str + _strt) = 32;
          }
    return 0; 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
01.12.2013, 01:47     после цикла while символьный массив обнуляется? #2
А какая роль данного цикла?
caiman
11 / 11 / 1
Регистрация: 17.11.2013
Сообщений: 39
01.12.2013, 01:55     после цикла while символьный массив обнуляется? #3
На сколько я могу понимать, Вы этим циклом пытаетесь посчитать количество символов в строке?
h8er
15 / 15 / 5
Регистрация: 20.11.2013
Сообщений: 92
01.12.2013, 02:06  [ТС]     после цикла while символьный массив обнуляется? #4
Цитата Сообщение от caiman Посмотреть сообщение
На сколько я могу понимать, Вы этим циклом пытаетесь посчитать количество символов в строке?
Ну да, пока while не встретит нуль, i приращивается. Но почему то с каждым проходом строка уменьшается на один символ. Т.е если была строка SOMETHINK, то с каждым проходом OMETHINK, METHINK ETHINK и так до конца. Разве инкремент++ присваивает значение в строку?
caiman
11 / 11 / 1
Регистрация: 17.11.2013
Сообщений: 39
01.12.2013, 02:10     после цикла while символьный массив обнуляется? #5
C++
1
for( ;_str[i] != 0; i++)
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
01.12.2013, 02:12     после цикла while символьный массив обнуляется? #6
Инкримент изменяет значение самой строки. Функция для получения длянный строки с учетом нуля
C++
1
i=strlen(_str)-1;
caiman
11 / 11 / 1
Регистрация: 17.11.2013
Сообщений: 39
01.12.2013, 02:16     после цикла while символьный массив обнуляется? #7
Зачем там #ifdef CHECKING?
И объявлен ли где-то этот макрос?

Добавлено через 2 минуты
+ если Вы заменяете значение символов на пробел, может стоит делать это явно?
Например:
C++
1
*(_str + _strt) = ' ';
h8er
15 / 15 / 5
Регистрация: 20.11.2013
Сообщений: 92
01.12.2013, 02:21  [ТС]     после цикла while символьный массив обнуляется? #8
Да, действительно, инкремент изменяет саму строку. Заменил на *(_str + i) все заработало. Спасибо!

Добавлено через 2 минуты
Цитата Сообщение от caiman Посмотреть сообщение
Зачем там #ifdef CHECKING?
И объявлен ли где-то этот макрос?

Добавлено через 2 минуты
+ если Вы заменяете значение символов на пробел, может стоит делать это явно?
Например:
C++
1
*(_str + _strt) = ' ';
Да, макрос был не объявлен, когда цикл не работал, в общем там все в порядке.

А какая разница, если все равно переводится в код? Думаю, что так, что эдак, рез-тат одинаков.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2013, 02:25     после цикла while символьный массив обнуляется?
Еще ссылки по теме:

C++ Символьный массив и указатель на char
Символьный массив: проверить, чтобы после каждого вхождения "1" шло парное вхождение "0" C++
Запись текста в символьный массив C++
C++ Заполнить символьный массив в классе
Sizeof и Динамический символьный массив! C++

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

Или воспользуйтесь поиском по форуму:
caiman
11 / 11 / 1
Регистрация: 17.11.2013
Сообщений: 39
01.12.2013, 02:25     после цикла while символьный массив обнуляется? #9
Так легче понимать, что происходит в коде. Машине все равно, но код-то люди читают.
Yandex
Объявления
01.12.2013, 02:25     после цикла while символьный массив обнуляется?
Ответ Создать тему
Опции темы

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