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

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

Войти
Регистрация
Восстановить пароль
 
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
#1

Программа виснет при переходе в функцию function - C++

07.03.2014, 12:32. Просмотров 279. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream> 
using namespace std;
 
void function(char * string)
{
    while(*string)
    {
     cout<<*string;
     *string++;
    }
}
 
int main()
 
{ 
    char string[20];
    cout<<"Enter string ";
    cin>>string;
    function(string);
    system("pause");
}


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream> 
using namespace std;
 
void function(char * string)
{
    while(*string)
    {
     cout<<*string;
     *string++;
    }
}
 
int main()
 
{ 
    char * string="";
    cout<<"Enter string ";
    cin>>string;
    function(string);
    system("pause");
}
Почему если я объявляю строку string в main как char * string,то программа виснет при переходе в функцию function?Если объявляю переменную как char string[100],то все проходит нормально.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2014, 12:32     Программа виснет при переходе в функцию function
Посмотрите здесь:

Сложность с потоками: программа виснет C++
C++ C:\Dev-Cpp\lib\vector.h `ostream' is neither function nor member function; cannot be declared friend
Программа виснет, когда ничего не делаешь (WINAPI) C++
программа виснет, не знаю что не так C++
При переходе из метода в главную функцию теряется информация C++
C++ Виснет программа
C++ Компилятор не находит ошибок, программа виснет вначале
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
THE--MASTER
Заблокирован
07.03.2014, 12:43     Программа виснет при переходе в функцию function #2
Цитата Сообщение от Игорюня Посмотреть сообщение
Почему если я
потому что у тебя будет вечный while, ты понимаешь вообще что ты делаешь?
char * string=""; - вот это указатель на динамический массив чаров длинной в 1 символ.

Добавлено через 45 секунд
делай хотя бы так char * string = new char[100];
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
07.03.2014, 12:51     Программа виснет при переходе в функцию function #3
Цитата Сообщение от Игорюня Посмотреть сообщение
Почему если я объявляю строку string в main как char * string
потому что char * string - это не строка. Это указатель, который указывает (в данном случае) на константную строку.
Разве компилятор не выдает предупреждение?
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
07.03.2014, 13:46  [ТС]     Программа виснет при переходе в функцию function #4
Спасибо.Раньше считал,что char string[] и char * string="" -это одно и тоже.
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
07.03.2014, 15:24     Программа виснет при переходе в функцию function #5
C++
1
2
3
4
5
6
7
char s1[] = "123"; //неконстантный (можно менять содержимое массива) массив символов с начальным значением '1','2','3','0', размер 4
char s2[4]; //неконстантный массив символов (можно менять содержимое массива), размер 4, начального значения нет
char * pS1 = "123"; //адрес первого элемента константного массива символов (который неявно приведен к указателю на
 //неконстантный массив), через этот адрес нельзя менять содержимое массива, хоть язык это и позволяет (эта возможность
 //оставлена по историческим причинам). поведение программы в случае попытки изменения неопределено.
char const * pS2 = "123"; //адрес первого элемента константного массива символов (содержимое менять нельзя и система типов
 //языка не позволит это нарушить без явных приведений).
Tulosba
:)
Эксперт С++
4391 / 3234 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.03.2014, 17:55     Программа виснет при переходе в функцию function #6
Цитата Сообщение от DrOffset Посмотреть сообщение
с начальным значением '1','2','3','0',
... '\0'
Можно ещё добавить:
C++
1
char const * const pS3 = "123"; // Константный адрес первого элемента константного массива символов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2014, 17:58     Программа виснет при переходе в функцию function
Еще ссылки по теме:

C++ Сделать так, что бы при неверном значении программа сообщала об этом и запускала функцию второй раз
C++ Std::function на шаблонную функцию
Сбиваются указатели при переходе между функциями C++
C++ Почему без пустого целочисленного поля в базовом классе программа виснет?
C++ Развейте мои сомнения: упростится ли программирование при переходе от C к C++?

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

Или воспользуйтесь поиском по форуму:
DrOffset
6851 / 4062 / 927
Регистрация: 30.01.2014
Сообщений: 6,859
07.03.2014, 17:58     Программа виснет при переходе в функцию function #7
Цитата Сообщение от Tulosba Посмотреть сообщение
... '\0'
Это опечатка у меня, последний символ должен был быть не '0', а '\0'
Yandex
Объявления
07.03.2014, 17:58     Программа виснет при переходе в функцию function
Ответ Создать тему
Опции темы

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