Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
demondy
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 8
#1

в чем дело? - C++

27.03.2013, 12:48. Просмотров 685. Ответов 21
Метки нет (Все метки)

может кто объяснит в чем дело?
просто заметил одну особенность, если temp <=8 символам (не считая нулевого в конце), то t выводит с двумя левыми символами в конце, если >8 символов, то всё выводит как надо

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
void fun(char* p)
{
 char * temp="12345678";
 while (*temp)
  *p++=*temp++;
};
int main()
{
   char* t="asdf";
   fun(t);
   cout << t << endl;
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2013, 12:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос в чем дело? (C++):

В чем дело? - C++
Что такое, почему не создается прога?

getline() в чем дело - C++
Нужно заполнять данный массив, если использовать просто &quot;cin&lt;&lt;&quot; то пробелы нельзя делать при вводе. Поэтому хочу использовать getline(),...

не пойму в чем дело - C++
всем привет! такая вот у меня проблема: две сортировки должны отсортировать массивы из 1000, 5000 и 10000 элементов и подсчитать время...

не могу понять в чем дело - C++
In file included from /usr/local/lib/gcc47/include/c++/csignal:44:0, from /home/dir/core.h:67: ...

Ни как не разберусь в чем дело... - C++
Подскажите что не так ругается на функцию в строке 23 говорит что &quot;результатом вычисления фрагмента не является функция, принимающая 1...

небольшая ошибка в чем дело? - C++
не компилится данная прога в с++ выдает error C2447: '{' : missing function header (old-style formal list?) в ms visual studio 2008 ...

21
-=ЮрА=-
Заблокирован
Автор FAQ
27.03.2013, 12:50 #2
Цитата Сообщение от demondy Посмотреть сообщение
char* t="asdf";
- ОМГ ну память выделена в лиетрале под 4 символа, а в своей функции пробуешь закопипастить 8
Цитата Сообщение от demondy Посмотреть сообщение
temp="12345678";
- слышал когда-нибудь о размерах блоков памяти, ошибки сегментации ит.д?
0
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
27.03.2013, 12:51 #3
Простите, что вы хотите, чтобы эта функция делала?
0
demondy
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 8
27.03.2013, 12:52  [ТС] #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- ОМГ ну память выделена в лиетрале под 4 символа, а в своей функции пробуешь закопипастить 8 - слышал когда-нибудь о размерах блоков памяти, ошибки сегментации ит.д?
оно понятно, просто интересно, почему если больше 8 символов, то все как надо работает

Добавлено через 50 секунд
Цитата Сообщение от eocron Посмотреть сообщение
Простите, что вы хотите, чтобы эта функция делала?
собственно говоря ничего.. так просто заметил случайно
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.03.2013, 12:53 #5
demondy, http://www.cyberforum.ru/blogs/18334/blog97.html
1
-=ЮрА=-
Заблокирован
Автор FAQ
27.03.2013, 13:00 #6
Цитата Сообщение от demondy Посмотреть сообщение
оно понятно, просто интересно, почему если больше 8 символов, то все как надо работает
- да потому что у t тогда память выделена под большее число символов чем у
Цитата Сообщение от demondy Посмотреть сообщение
char * temp="12345678";
вот и всё, напиши в своём p 15 символов и попробуй скопировать в которой их будет 10.

Не по теме:

Для 8-ми символов...

0
demondy
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 8
27.03.2013, 13:06  [ТС] #7
В общем, вопрос получается не в том, почему это не работает, а в том почему это работает...

спасибо всем!!

тема закрыта
0
-=ЮрА=-
Заблокирован
Автор FAQ
27.03.2013, 13:13 #8
demondy, Во!Вот тебе пример чтобы понял какую ерунду ты посчитал за истину
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
void fun(char* p)
{
    char * temp= (char *)"String with length more than 10 symbols";
    while (*temp)
        *p++=*temp++;
}
int main()
{
    char * t = (char *)"0123456789";
    fun(t);
    cout << t << endl;
    return 0;
}
Цитата Сообщение от demondy Посмотреть сообщение
росто интересно, почему если больше 8 символов, то все как надо работает
- смотри
http://codepad.org/QMlrsEzA
Output:
Segmentation fault
Добавлено через 3 минуты
Цитата Сообщение от demondy Посмотреть сообщение
В общем, вопрос получается не в том, почему это не работает, а в том почему это работает...
спасибо всем!!
тема закрыта
- возможно код тебя отрезвит, не работает вообще. На пальцах
В блоке p памяти на 8 символов + нуль-терминатор
В блоке t с четырмя символами памяти под 4ри символа + нуль-терминатор
Когда блок t большей длинны чем 8 символов, то копирование возможно. Скажем в t 9 символов + нуль терминатор - всё скопируется ок, а теперь в p подставь мою строку
(char *)"String with length more than 10 symbols"; а в t оставь 9-ть, и погляди что будет.
Ну что тут неясного?!

Добавлено через 9 секунд
Цитата Сообщение от demondy Посмотреть сообщение
В общем, вопрос получается не в том, почему это не работает, а в том почему это работает...
спасибо всем!!
тема закрыта
- возможно код тебя отрезвит, не работает вообще!
На пальцах
В блоке p памяти на 8 символов + нуль-терминатор
В блоке t с четырмя символами памяти под 4ри символа + нуль-терминатор
Когда блок t большей длинны чем 8 символов, то копирование возможно:
Скажем в t 9 символов + нуль терминатор, а в р - 8-мь + нуль терминатор - всё скопируется ок!А теперь в p подставь мою строку
(char *)"String with length more than 10 symbols"; а в t оставь 9-ть, и погляди что будет. (Подсказка Segmentation fault)
Ну что тут неясного?!
0
demondy
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 8
27.03.2013, 13:16  [ТС] #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Segmentation fault
у меня этот код работает
может мне нужно компилятор поменять BC++ 5.02 - еще со времен универа остался
0
-=ЮрА=-
Заблокирован
Автор FAQ
27.03.2013, 13:22 #10

Не по теме:

Цитата Сообщение от demondy Посмотреть сообщение
у меня этот код работает
может мне нужно компилятор поменять BC++ 5.02 - еще со времен универа остался
- Да в дебуге работает всё и даже ошибки!
Скомпилируй релиз версию!
Фуух ты мне напоминаешь меня в сааамом начале - "когда хоть кол на голове теши, вбил в себе в голову и пока на пузе не проползёшь никто дурь из головы не выбьет..."
Дело не в том что работает в режиме Debug, дело в том что в реальном exe без
try блоков, трассировок, которые любезно предоставляет нам дебуг - твой код упадёт с большой горы из-за Segmentation faul!!!Высказался я наконец-то!



Добавлено через 2 минуты
demondy, Линк на кодпад это линк на компилятор в стандрате который показывает как реально будет развиваться работа программы - так понятней почему код не работоспособен?
1
demondy
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 8
27.03.2013, 13:28  [ТС] #11
ОК, ошибка понятна была изначально, просто думаю мало ли. Так делать не буду

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Линк на кодпад это линк на компилятор в стандрате который показывает как реально будет развиваться работа программы - так понятней почему код не работоспособен?
про это не знал, спасибо за инфу..

СПАСИБО
0
-=ЮрА=-
Заблокирован
Автор FAQ
27.03.2013, 13:34 #12
Цитата Сообщение от demondy Посмотреть сообщение
BC++ 5.02 - еще со времен универа остался
- Ниже скриншот из VisualStudio 6.0 (компилятор остался у меня с института и выпущен аж в 99-году), вот смотри пошаговое прохождение

В добавок давай немножко модернезируем твой код (как видишь я ничего не менял) просто явно разнёс блоки и вылетит сей код на втоём компиляторе даже в Debug-е я уверен почти на 100%
http://codepad.org/S77HSfWZ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
void fun(char* p, char * temp)
{
    while (*temp)
        *p++=*temp++;
}
int main()
{
    char * t = (char *)"0123456789";
        char * temp = (char *)"String with length more than 10 symbols";
    fun(t, temp);
    cout << t << endl;
    cin.get();
    return 0;
}
0
Миниатюры
в чем дело?   в чем дело?  
-=ЮрА=-
27.03.2013, 13:37
  #13

Не по теме:

Цитата Сообщение от demondy Посмотреть сообщение
про это не знал, спасибо за инфу..
СПАСИБО
- выше постил до того как увидел что ты меня услышал
Цитата Сообщение от demondy Посмотреть сообщение
Так делать не буду
- мудрое решение!

0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.03.2013, 13:38 #14
Цитата Сообщение от demondy Посмотреть сообщение
оно понятно, просто интересно, почему если больше 8 символов, то все как надо работает
потому что памяти хватает.
0
-=ЮрА=-
Заблокирован
Автор FAQ
27.03.2013, 13:38 #15
demondy, тут смотри - сама коснтрукция
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while (*temp)
* * * * *p++=*temp++;
- вполне оправдана и работоспособна, но только надо чтобы блок р имел памяти не меньше чем блок temp - тогда всё будет гуд!Это я к тому что сам цикл юзать можешь, только заботься чтобы не было сигфолта и всё будет ок
0
27.03.2013, 13:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2013, 13:38
Привет! Вот еще темы с ответами:

Пятиминутное дело!В чем ошибка? - C++
В первой строке дано неотрицательное число N- количество элементов массива (N&lt;=100). Во второй строке дано число b Заполнить массив...

Auto n.first невозможно преобразование, в чем дело? - C++
невозможно преобразовать аргумент 1 из &quot;const std::string&quot; в &quot;std::string &amp;&quot;

Не понимаю в чем дело с многофайловым приложением - C++
Уважаемые форумчане, только начал изучать C++(точнее 2 день), сделал простенький алгоритм, проверяющий пару ид пользователя и пароль, в...

Компилятор выдаёт ошибку, в чем дело?? - C++
Задание: 1. Определить иерархию классов (в соответствии с вариантом). Базовый класс должен включать обязательный атрибут char *name. 2....


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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