05.09.2016 Views

Стефан Р. - С++ Для чайников

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

строки* pszTarget<br />

void concatString (char szTarget[], char szSourcel])<br />

int nTarget Index;<br />

int nSourcelndex;<br />

// найти конец первой строки<br />

while(szTarget[++nTargetIndex])<br />

// присоединяет вторую строку к концу первой<br />

while(szSource[nSourcelndex])<br />

г<br />

1<br />

szTarget[nTargetlndex] =<br />

szSource[nSourcelndex];<br />

n7argetlndex++;<br />

nSourceIndex++;<br />

Соберите и запустите программу. Когда она запросит первую строку, введите чтонибудь<br />

наподобие "это строка", а на запрос второй строки введите "ЭТО СТ<strong>Р</strong>ОКА"<br />

(впрочем, можно писать все, что угодно).<br />

Вместо объединения двух строк программа завершится с кодом выхода Oxff. Щелкните<br />

на ОК (других вариантов у вас все равно нет). Чтобы утешить вас, отладчик откроет<br />

окно, содержащее следующую информацию:<br />

Call frame traceback<br />

Concatenate.epp(4 9) in function concatString FPcTO<br />

Concatenate.epp(28} in function main<br />

in function crtl__startup+174<br />

Из этого видно, что ошибка возникла в строке 49 модуля Concatenate, epp, которая<br />

находится в функции concatString (), вызванной в строке 28 функции main ().<br />

Строка 49 имеет вид<br />

while(szTarget[++nTaгдеtIndex])<br />

А строка 28 содержит вызов функции<br />

concatString(szStringl, " — ");<br />

Внешне вроде бы все в порядке и с командой в строке 49, и с вызовом функции<br />

в строке 28. Чтобы найти ошибку, понадобится отладчик.<br />

Примечание. Хотя вы уже встречались с похожей ошибкой, я все равно настоятельно<br />

советую детально разобрать этот пример.<br />

Пошаговое выполнение программы<br />

Первое, что стоит сделать при поиске ошибки с помощью отладчика, — это выполнить<br />

программу в пошаговом режиме. В среде rhide выполните команду Runoprogram Reset.<br />

Примечание. Из табл. 11.1 видно, что в rhide эта команда выполняется с помощью<br />

клавиш {или клавиш в Visual C++). Больше я не буду давать подсказок,<br />

поскольку все необходимые команды содержатся в табл. 11.1. Кроме того, все команды,<br />

используемые в этой главе, доступны из выпадающих меню среды разработчика.<br />

Команда Program Reset заставляет отладчик заново начать работу с программой {а<br />

не с того места, где вы находитесь). Никогда не вредно перезагрузить отладчик перед<br />

началом работы.<br />

Выполните команду Step Over (пошаговое выполнение без входа в функции). Среда<br />

rhide откроет окно MS DOS, как и в нормальном режиме, однако сразу после<br />

этого переключится в окно редактирования программы, выделив первую исполняе-<br />

126 Часть II. Становимся программистами

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!