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

Почему зацикливается? - C++

Восстановить пароль Регистрация
 
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
11.06.2011, 16:42     Почему зацикливается? #1
Такая программка:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <conio.h>
#include <iostream>
#include <windows.h>
 
using namespace std;
 
void strCon(char *str1, char *str2, int len= -1) {
    if(len== -1) len = strlen(str2);
    while(*str1)
        str1++;
    while(*str2 && len) {
        *str1 = *str2;
        str1++;
        str2++;
        len--;
    }
    *str1 = '\0';
}
 
int _tmain() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
        
    char string[] = {"Америка"};
    char tooString[] = {"-Европа"};
    
    strCon(string, tooString, 5);
    cout << string;
    
    _getch();
    
    return 0;
}
Всё нормально компилится, запускаю, выводит строку, к которой добавлены 5 символов из второй строки и при нажатии Enter винда выводит три окошка, что-де обнаружена ошибка в программе и она будет закрыта (обычно она просто закрывается при нажатии сей клавиши). Если совсем убрать из исходника _getch(), то вывод зациклится, а затем будут выведены всё те же три окошка; если же поместить _getch() после return, то вывод просто зациклится. Не пойму, где ошибка..
Использую Borland Free Compiler 5.5.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.06.2011, 17:01     Почему зацикливается? #2
Цитата Сообщение от ramses Посмотреть сообщение
char string[] = {"Америка"};
при таком написании, это все равно что оглалисть переменную типа char string[8] - статический массив, а в strCon вы пытаетесь его увеличить
ramses
-2 / 0 / 0
Регистрация: 24.04.2011
Сообщений: 55
11.06.2011, 17:20  [ТС]     Почему зацикливается? #3
Блин, точно. Спасибо.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.06.2011, 17:38     Почему зацикливается? #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
void strCon(char *str1, char *str2, int len= -1)
{
    if(len == -1) 
        len = strlen(str2);
    str1 += strlen(str1); 
    for(unsigned i = 0; str2[i] && i < len; i++)
        str1[i] = str2[i];
    str1[i] = '\0';
}
 
int main()
{
    std::locale::global(std::locale(""));
                
    char string[20] = "Америка";
    char tooString[] = "-Европа";
        
    strCon(string, tooString, 5);
    std::cout << string;
    std::cin.get();
    return 0;
}
Yandex
Объявления
11.06.2011, 17:38     Почему зацикливается?
Ответ Создать тему
Опции темы

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