1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 67
1

Сборка и отладчик дают разный результат

23.12.2015, 16:54. Показов 1286. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно было написать программу для вывода всех минимальных по длине слов в строке. Как такое возможно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <cstdio>
#include <cstring>
 
typedef unsigned short usi;
 
int main()
{
    const usi MAX_LOAD_STRING = 200;
    char input_str[MAX_LOAD_STRING],
            word_b[MAX_LOAD_STRING],
            buffer[MAX_LOAD_STRING];
    bool EOS = false;
    usi min_length = MAX_LOAD_STRING + 1, cur_length;
 
    fflush(stdin);
    gets(input_str);
 
    for(usi i = 0, j = 0, z; EOS != true; )
    {
        z = 0;
        while(input_str[i] != ' ' && input_str[i])
            word_b[z] = input_str[i], ++i, ++z; ++i;
 
        word_b[z] = '\0';
 
        if(!input_str[i])
            EOS = true;
 
        cur_length = strlen(word_b);
 
        if(cur_length == min_length)
        {
            buffer[j] = ' '; ++j;
            strcpy(&buffer[j], word_b);
            j += cur_length;
        }
 
        else if(cur_length < min_length)
        {
            strcpy(buffer, word_b);
            j = cur_length;
            min_length = cur_length;
        }
    }
 
    printf("%s", buffer);
 
    return 0;
}
Миниатюры
Сборка и отладчик дают разный результат   Сборка и отладчик дают разный результат  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2015, 16:54
Ответы с готовыми решениями:

Метод хорд и дихотомии дают разный результат
Задание F(x)=x^5+x^3-1 Входные параметры: a=0 b=-2 E=0,01 По дихотомии выдает...

с хабра и мой код дают разный результат. why
здравствуйте, ради обучения решил сделать проверку во время компиляции на наличие в классе функции,...

FileStream и StreamReader дают разный результат
Народ кто знает почему результат разный??? Как такое может быть? Что делать чтобы результат в...

Одинаковые вызовы одной и той же функции дают разный результат, почему так?
Друзья! Код: class Bar: def __init__(self): pass def somefun(self): ...

15
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
23.12.2015, 17:06 2
Код содержит UB.
0
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 67
23.12.2015, 17:18  [ТС] 3
Объясни пожалуйста
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
23.12.2015, 17:19 4
Цитата Сообщение от Unsigned Посмотреть сообщение
C++
1
word_b[z] = input_str[i], ++i, ++z; ++i;
Что, по вашему мнению, происходит в этой строке?
И в какой момент?
0
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 67
23.12.2015, 17:22  [ТС] 5
Есть что-то конкретное с неопределенным поведением? Просто я вроде использовал только тривиальные конструкции

Добавлено через 49 секунд
В этой строке всё, что через запятую в теле цикла поочередно выполнится, а после точки с запятой после цикла

Добавлено через 1 минуту
Исправил, все равно тоже самое
C++
1
2
3
4
5
while(input_str[i] != ' ' && input_str[i])
        {
            word_b[z] = input_str[i]; ++i; ++z;
        }
        ++i;
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
23.12.2015, 17:27 6
Лучший ответ Сообщение было отмечено Unsigned как решение

Решение

Когда из while выходит по условию input_str[i] а потом ++i; на что укажет input_str[i] в 26 строке?
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
23.12.2015, 17:27 7
http://alenacpp.blogspot.com/2... oints.html
1
1 / 1 / 0
Регистрация: 21.12.2014
Сообщений: 67
23.12.2015, 17:31  [ТС] 8
Спасибо, дело было в выходе за конец строки)
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.12.2015, 19:04 9
Цитата Сообщение от avgoor Посмотреть сообщение
Что, по вашему мнению, происходит в этой строке?
И в какой момент?
здесь нет UB

оператор запятая,
и точка с запятой денотируют точку следования.
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
23.12.2015, 19:06 10
Цитата Сообщение от hoggy Посмотреть сообщение
здесь нет UB
Там есть UB - выход за границы си-массива.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.12.2015, 19:42 11
Цитата Сообщение от avgoor Посмотреть сообщение
Там есть UB - выход за границы си-массива.
конкретно, строка:
C++
1
word_b[z] = input_str[i], ++i, ++z; ++i;
UB не содержит.

и что б вы знали,
выход за пределы диапазона массива - ill-formed,
а не UB.

In C++, it is syntactically correct to exceed the valid range of indices for an array. This can create problems, since accessing out-of-range elements do not cause errors on compilation, but can cause errors on runtime.
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
23.12.2015, 19:55 12
Цитата Сообщение от hoggy Посмотреть сообщение
конкретно, строка:
UB не содержит.
Где я подобное утверждал?
А про ill-formed... я пошел перечитывать стандарт.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.12.2015, 20:09 13
Цитата Сообщение от avgoor Посмотреть сообщение
Где я подобное утверждал?
см #2, #3, #4

Цитата Сообщение от avgoor Посмотреть сообщение
А про ill-formed... я пошел перечитывать стандарт.
см "well-formed", "ill-formed"
встречаются часто, однако их нужно понимать в обывательском смысле.
в отличие от UB, данные понятия не являются терминами.
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
23.12.2015, 20:51 14
Из стандарта: well-formed - Программа, которая не содержит синтаксических ошибок, диагностируемых семантических ошибок и подчиняется правилу одного определения.
ill-formed не well-formed программа.

Где в этой программе ill-formed?

Теперь по порядку.

Я написал, что код содержит UB.
Я спросил у ТС что происходит в строке word_b[z] = input_str[i], ++i, ++z; ++i;
Я спросил у ТС на что будет указывать input_str[i] в 26 строке.

Итого: двумя вопросами я подтолкнул ТС к обнаружению его ошибки.
Почему вы решили, что именно во втором сообщении я указал на UB?
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.12.2015, 21:06 15
Цитата Сообщение от avgoor Посмотреть сообщение
Почему вы решили, что именно во втором сообщении я указал на UB?
потому что #3 - ответ на просьбу "объяснить по поводу UB" (см #2, #3, #4)

Цитата Сообщение от avgoor Посмотреть сообщение
Где в этой программе ill-formed?
я её не разглядывал.
вы там что-то про array out of range
вещали.
0
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
23.12.2015, 21:17 16
Indirection through an invalid pointer value
and passing an invalid pointer value to a deallocation function have undefined behavior. Any other use of
an invalid pointer value has implementation-defined behavior.
Стандарт. 3.7.4.2.4.
0
23.12.2015, 21:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2015, 21:17
Помогаю со студенческими работами здесь

Когда a = a + b и a+= b дают одинаковый результат и когда разный
Приведите пример, когда a = a + b и a += b дают одинаковый результат и когда разный.

Разный результат
Стоит денвер у меня, мучу сайт. Фишка такая, что если в командной строке браузера вбить свой сайт,...

Memtest разный результат
Столкнулся с BSOD 0x000000a стал проверять оперативку MemTest показывает разные результаты то есть...

Разный результат в С# и Sql
Здравствуйте. Подскажите пожалуйста почему результат отображается по разному? Как сделать чтобы в...


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

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

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