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

в чем дело?

27.03.2013, 12:48. Показов 1845. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2013, 12:48
Ответы с готовыми решениями:

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

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

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

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

Добавлено через 50 секунд
Цитата Сообщение от eocron Посмотреть сообщение
Простите, что вы хотите, чтобы эта функция делала?
собственно говоря ничего.. так просто заметил случайно
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
27.03.2013, 12:53
demondy, https://www.cyberforum.ru/blogs/18334/blog97.html
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
27.03.2013, 13:00
Цитата Сообщение от 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  [ТС]
В общем, вопрос получается не в том, почему это не работает, а в том почему это работает...

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

тема закрыта
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
27.03.2013, 13:13
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  [ТС]
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Segmentation fault
у меня этот код работает
может мне нужно компилятор поменять BC++ 5.02 - еще со времен универа остался
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
27.03.2013, 13:22

Не по теме:

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



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

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

СПАСИБО
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
27.03.2013, 13:34
Цитата Сообщение от 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

Не по теме:

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

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

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

Добавлено через 43 секунды
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
но только надо чтобы блок р имел памяти не меньше чем блок temp
Это понятно...
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.03.2013, 13:49
Цитата Сообщение от demondy Посмотреть сообщение
Это понятно...
Тогда о чём тема?
0
0 / 0 / 0
Регистрация: 27.03.2013
Сообщений: 8
27.03.2013, 13:50  [ТС]
Последний вопрос: "Если на кодепад выдает правильный output, а у меня не такой, то это значит что мой компилятор устарел?"
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
27.03.2013, 13:59
Цитата Сообщение от demondy Посмотреть сообщение
Последний вопрос: "Если на кодепад выдает правильный output, а у меня не такой, то это значит что мой компилятор устарел?"
- твой компилятор выдаёт в режиме отладки или режиме Release? По поводу компилятора надо смотреть его суппорт, думаю для ВС 5.2 его можно отыскать в гугле
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.03.2013, 13:59
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru