Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 8
1

в чем дело?

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

Author24 — интернет-сервис помощи студентам
может кто объяснит в чем дело?
просто заметил одну особенность, если 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2013, 12:48
Ответы с готовыми решениями:

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

В чём тут дело???
программы то зфцыкливаются, то вообще ни чего не выводят. Вводится последовательность из N...

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

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

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

Добавлено через 50 секунд
Цитата Сообщение от eocron Посмотреть сообщение
Простите, что вы хотите, чтобы эта функция делала?
собственно говоря ничего.. так просто заметил случайно
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
27.03.2013, 12:53 5
demondy, https://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-ми символов...:facepalm:

0
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
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
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
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.03.2013, 13:38 14
Цитата Сообщение от demondy Посмотреть сообщение
оно понятно, просто интересно, почему если больше 8 символов, то все как надо работает
потому что памяти хватает.
0
Заблокирован
Автор FAQ
27.03.2013, 13:38 15
demondy, тут смотри - сама коснтрукция
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while (*temp)
* * * * *p++=*temp++;
- вполне оправдана и работоспособна, но только надо чтобы блок р имел памяти не меньше чем блок temp - тогда всё будет гуд!Это я к тому что сам цикл юзать можешь, только заботься чтобы не было сигфолта и всё будет ок
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.03.2013, 13:42 16
ТСу срочно читать "хакинг. искусство эксплойта".
0
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 8
27.03.2013, 13:45  [ТС] 17
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
вылетит сей код на втоём компиляторе даже в Debug-е я уверен почти на 100%
Работает...
output: "String with length more than 10 symbols 10 symbols"

Последний вопрос: "Если на кодепад выдает правильный output, а у меня не такой, то это значит что мой компилятор устарел?"

Добавлено через 43 секунды
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
но только надо чтобы блок р имел памяти не меньше чем блок temp
Это понятно...
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.03.2013, 13:49 18
Цитата Сообщение от demondy Посмотреть сообщение
Это понятно...
Тогда о чём тема?
0
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 8
27.03.2013, 13:50  [ТС] 19
Последний вопрос: "Если на кодепад выдает правильный output, а у меня не такой, то это значит что мой компилятор устарел?"
0
Заблокирован
Автор FAQ
27.03.2013, 13:59 20
Цитата Сообщение от demondy Посмотреть сообщение
Последний вопрос: "Если на кодепад выдает правильный output, а у меня не такой, то это значит что мой компилятор устарел?"
- твой компилятор выдаёт в режиме отладки или режиме Release? По поводу компилятора надо смотреть его суппорт, думаю для ВС 5.2 его можно отыскать в гугле
0
27.03.2013, 13:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2013, 13:59
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru