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

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

Войти
Регистрация
Восстановить пароль
 
alpha-particle
0 / 0 / 0
Регистрация: 16.09.2014
Сообщений: 3
#1

Не могу осознать причину ошибки - C++

31.07.2015, 22:46. Просмотров 198. Ответов 7
Метки нет (Все метки)

Ну, в общем, читаю, такой, Страуструпа и прогаю малеху его примеры.
Вот реализация одного из них:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
char * strcpy1(char * dst, const char * src){
    while (*dst++ = *src++)
        ;
    return dst;
}
int main()
{
    char* str1 = "Hello World!";
    char* str2 = "";
    std::cout << "str1: " << str1 << std::endl;
    str2 = strcpy1(str2, str1);
    std::cout << "str2: " << str2 << std::endl;
    return 0;
}
В теле функции в while выскакивает такая ошибка:
"Необработанное исключение по адресу 0x00C75E26 в Проект1.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00C7DBA4."

Знающие люди, подскажите, что тут не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2015, 22:46     Не могу осознать причину ошибки
Посмотрите здесь:

Не могу найти причину ошибки ! - C++
#include&lt;locale.h&gt; #include&lt;stdio.h&gt; #include&lt;iostream&gt; #include&lt;time.h&gt; #include&lt;algorithm&gt; #include&lt;vector&gt; using namespace...

Найти причину возникновения ошибки - C++
Выбрасывает здесь ошибку (if (Mart&gt;Max)) не знаю почему #include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;iostream&gt; ...

Ошибки выдаёт ( не пойму причину, что не так? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; int Area(float a, float b,...

Объясните причину ошибки: error stray '\240' in program - C++
#include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { vector &lt;int&gt; myVector(10,2); for(int i = 0; i &lt;...

Подскажите причину ошибки во фрагменте, аналогичный которому выше выполняется нормально - C++
Проблема в строке 116. Вместо if (kursor==milkis||(kursor==milkis)) должно быть if (kursor==milkis||(kursor==milkis)) но в таком...

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

Объяснить причину и способы устранения ошибки (неправильно присваивается первый элемент массива) - C++
Объясните, пожалуйста ошибку. Неправильно присваивается первый элемент массива.Место ошибки указал в комментариях. #include &lt;iostream&gt;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lss
921 / 851 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
31.07.2015, 22:50     Не могу осознать причину ошибки #2
C++
1
2
const char* str1 = "Hello World!";
char str2[20];
alpha-particle
0 / 0 / 0
Регистрация: 16.09.2014
Сообщений: 3
31.07.2015, 22:53  [ТС]     Не могу осознать причину ошибки #3
C++
1
char str2[20];
А почему именно такая размерность?
ДЕСАНТУРА
6 / 6 / 3
Регистрация: 25.02.2015
Сообщений: 173
31.07.2015, 22:54     Не могу осознать причину ошибки #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
 
char * strcpy1(char * dst, const char * src) {
 
    while (*dst++ = *src++);
    return dst;
}
 
int main()
{
    char* str1 = "Hello World!";
    char str2[255];
    std::cout << "str1: " << str1 << std::endl;
    strcpy1(str2, str1);
    std::cout << "str2: " << str2 << std::endl;
    system("pause");
    return 0;
}
lss
921 / 851 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
31.07.2015, 22:57     Не могу осознать причину ошибки #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void strcpy1(char * dst, const char * src)
{
    while (*dst++ = *src++);
}
 
int main()
{
    const char* str1 = "Hello World!";
    char str2[20];
    std::cout << "str1: " << str1 << std::endl;
    strcpy1(str2, str1);
    std::cout << "str2: " << str2 << std::endl;
    
    cin.get();
    return 0;
}
Добавлено через 21 секунду
Цитата Сообщение от alpha-particle Посмотреть сообщение
А почему именно такая размерность?
От фонаря.

Добавлено через 1 минуту
Цитата Сообщение от alpha-particle Посмотреть сообщение
подскажите, что тут не так?
Здесь указатель связан со строковым литералом - память только для чтения:
Цитата Сообщение от alpha-particle Посмотреть сообщение
char* str2 = "";
ДЕСАНТУРА
6 / 6 / 3
Регистрация: 25.02.2015
Сообщений: 173
31.07.2015, 22:57     Не могу осознать причину ошибки #6
Цитата Сообщение от alpha-particle Посмотреть сообщение
А почему именно такая размерность?
нужно сначала выделить память "куда записывать" + чтобы она её хватало на тот размер информации, который ты хочешь записать, а потом записывать уже, что ты и не сделал для переменной "str2";
alpha-particle
0 / 0 / 0
Регистрация: 16.09.2014
Сообщений: 3
31.07.2015, 23:01  [ТС]     Не могу осознать причину ошибки #7
Цитата Сообщение от lss Посмотреть сообщение
Здесь указатель связан со строковым литералом - память только для чтения
Понял, спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2015, 23:01     Не могу осознать причину ошибки
Еще ссылки по теме:

Объяснить причину и способы устранения ошибки error LNK2019: unresolved external symbol - C++
Создавал десктопное приложение win32, решил подключить к нему музыку. Компиляция через ctrl+F7 удачна, а вот собирание всего проекта выдает...

Инициализация поля класса (строки в стиле Си): найти причину возникновения ошибки и исправить эту ошибку - C++
Начинаю учить C++ и хочу сделать что-то типо &quot;игры&quot; в текстовом варианте. Вот столкнулся с проблемой - хранение бонусов при ответе,...

Учу классы. Не запускается простейшая прога.Не могу понять причину - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class MyDogs{ public: int...

Не понимаю причину ошибки "Statement missing ;" - C++
ИДЕ -- C++Builder 6 Суть кода: Перевод инфикской записи в постфиксную. Стек работает, проблема в самой функции перевода PolConv. Я...

Не могу определить причину "магической" операции присвоения - C++
Суть такая: написал посимвольный парсер для консоли. До недавнего времени работал как часы. Обращаюсь сюда по тому, что понять не могу...


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

Или воспользуйтесь поиском по форуму:
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,269
Завершенные тесты: 3
31.07.2015, 23:01     Не могу осознать причину ошибки #8
alpha-particle, а вот почему, объяснено в книге Кернигана и Ритчи по Си. Когда пишут char* cр = "Some string", подразумевается, что ср указывает на константную строку. Стало быть, изменить ее элементы нельзя. А ведь это и происходит в strcpy1. Так что в переменную dst передавайте массив, а не указатель на конст. строку:
C++
1
2
3
char cp[64]; 
char* cc = "hahaha". 
strcpy(cp, cc);
Yandex
Объявления
31.07.2015, 23:01     Не могу осознать причину ошибки
Ответ Создать тему
Опции темы

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