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

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

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

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

07.03.2014, 12:32. Просмотров 295. Ответов 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++
Задача: описать класс &quot;безопасный массив целых чисел&quot;. Все бы хорошо, но при переходе из перегруженных операторов + и * возникают проблемы:...

Std::function на шаблонную функцию - C++
Здравствуйте :) Делаю такую вещь: template &lt;typename T1, typename T2&gt; typename std::common_type&lt;T1,T2&gt;::type func(T1 val1, T2 val2) ...

Виснет программа - C++
Задача следующая: Напишите программу, которая приблизительно рассчитывает значение математической константы е, используя формулу : е = 1 +...

Сложность с потоками: программа виснет - C++
LPVOID u1=new LPVOID(); Param* pStruct1 = reinterpret_cast&lt;Param*&gt;(u1); LPVOID u2=new LPVOID(); Param* pStruct2 =...

программа виснет, не знаю что не так - C++
Дана квадратная целочисленная матрица. Определить, является ли она магическим квадратом. В магическом квадрате сумма чисел по всем...

Компилятор не находит ошибок, программа виснет вначале - C++
Есть два кода, в обоих случаях после ввода первых значений виснет программа. ОС Windows 7 компилятор DEV C++ (4.9.9.2) Задание №1 ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
THE--MASTER
Заблокирован
07.03.2014, 12:43 #2
Цитата Сообщение от Игорюня Посмотреть сообщение
Почему если я
потому что у тебя будет вечный while, ты понимаешь вообще что ты делаешь?
char * string=""; - вот это указатель на динамический массив чаров длинной в 1 символ.

Добавлено через 45 секунд
делай хотя бы так char * string = new char[100];
DrOffset
7092 / 4233 / 950
Регистрация: 30.01.2014
Сообщений: 7,008
07.03.2014, 12:51 #3
Цитата Сообщение от Игорюня Посмотреть сообщение
Почему если я объявляю строку string в main как char * string
потому что char * string - это не строка. Это указатель, который указывает (в данном случае) на константную строку.
Разве компилятор не выдает предупреждение?
Игорюня
20 / 16 / 7
Регистрация: 07.12.2013
Сообщений: 244
07.03.2014, 13:46  [ТС] #4
Спасибо.Раньше считал,что char string[] и char * string="" -это одно и тоже.
DrOffset
7092 / 4233 / 950
Регистрация: 30.01.2014
Сообщений: 7,008
07.03.2014, 15:24 #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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.03.2014, 17:55 #6
Цитата Сообщение от DrOffset Посмотреть сообщение
с начальным значением '1','2','3','0',
... '\0'
Можно ещё добавить:
C++
1
char const * const pS3 = "123"; // Константный адрес первого элемента константного массива символов
DrOffset
7092 / 4233 / 950
Регистрация: 30.01.2014
Сообщений: 7,008
07.03.2014, 17:58 #7
Цитата Сообщение от Tulosba Посмотреть сообщение
... '\0'
Это опечатка у меня, последний символ должен был быть не '0', а '\0'
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2014, 17:58
Привет! Вот еще темы с ответами:

Программа виснет, когда ничего не делаешь (WINAPI) - C++
Доброго времени суток. Наконец-то дело подошло к концу, но на финишной прямой ждал неприятный сюрприз. Зависает на ровном месте...

Сделать так, что бы при неверном значении программа сообщала об этом и запускала функцию второй раз - C++
Возникла проблема в программе. void rasa (int classa) это функция которая принимает число 1-2-3 и в зависимости от числа отправляет нужное...

Сбиваются указатели при переходе между функциями - C++
#include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; class Polynom { public: Polynom(int power_ = 0, float *koef_...

Почему без пустого целочисленного поля в базовом классе программа виснет? - C++
Итак, имеет три маленьких файлика: //expclasses10l.h class CLB { public: int erunda; CLB(); ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.03.2014, 17:58
Ответ Создать тему
Опции темы

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