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

Баг strcmp

27.11.2010, 18:57. Показов 3082. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Линк на архив с видео, где записана ошибка.
http://upload.com.ua/get/902136351/Bug.zip
Пароль: bug
Объясните ситуацию.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2010, 18:57
Ответы с готовыми решениями:

std::regex : баг на сайте или баг компилятора?
http://en.cppreference.com/w/cpp/regex/regex_match этот код выкидывает throw... Добавлено через 35 секунд компилятор gcc 4.8

Баг asio? или баг TCP стека?
всем привет. повстречался с очень странным багом. и не могу определить кто бажит, asio, или TCP-стек. на стороне клиента,...

strcmp
Вот изучаю С++, тут столкнулся с простой проблеммой, функция strcmp,которая проверяет на равенство 2 строки между собою. Попробывал...

33
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
27.11.2010, 19:23
Неужели нельзя залить на файлообменник, где не надо ждать минуту со всякой рекламой?
X больше, чем O, возвращается любое положительное число, не обязательно единица. А там проверка на true.
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
27.11.2010, 19:29  [ТС]
Цитата Сообщение от Somebody Посмотреть сообщение
Неужели нельзя залить на файлообменник, где не надо ждать минуту со всякой рекламой?
X больше, чем O, возвращается любое положительное число, не обязательно единица. А там проверка на true.
на true та же ситуация
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
27.11.2010, 19:34
alexsvk, за такую тему забанить мало
оформляйте тему нормально
0
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 5
27.11.2010, 19:43
запомните у стандартных функций нет багов
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
27.11.2010, 19:47
А ТС знает, что strcmp возвращает ноль, если две строки равны, т.е. значение, которое в остальных случаях интерпретируется как ложь?
Кстати, а что мешает выложить тот участок кода, где был замечен "баг", вместо того, чтобы мучаться с записью видео/выкладыванием его на файлообменник и заставлять мучаться других при его скачивании?

Не по теме:

А еще багов в стандартной библиотеке не заметил? А то интересно было бы послушать...

0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
27.11.2010, 19:58
Я заметил - log(-1) неправильно считает.

Добавлено через 1 минуту
И ещё sqrt(x) == x при x = 1 почему-то...
1
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
27.11.2010, 20:04
Цитата Сообщение от silent_1991 Посмотреть сообщение
Я заметил - log(-1) неправильно считает
да, беда-то какая А как должно быть правильно?
Цитата Сообщение от silent_1991 Посмотреть сообщение
И ещё sqrt(x) == x при x = 1 почему-то...
а у меня выводит единицу

Не по теме:

Кстати, asin(x) для |x|>1 только у меня не работает?

0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
27.11.2010, 20:12  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    char str[2] = "";
    char s [2];
 
    s [0] = who;
    s [1] = '\0';
 
    for(int i = 0; i < 30; i++)
    {
        for (int j = 0; j < 63; j++)
        {
            getCellValue(i,j,str);
 
            if (strcmp(str,s) == true)
            {
                setCellValue(i,j,(char*)s);
            }
        }
    }
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
27.11.2010, 20:15
alexsvk, а теперь скажи, какие значения аргументов у функции strcmp в момент "бага" и какой результат ты от нее ожидаешь (str равна s, str больше s, str меньше s)? Судя по твоему коду, setCellValue должно срабатывать, когда str больше, чем s. Я прав?
И да, какой смысл кастовать s к типу char*?
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
27.11.2010, 20:20  [ТС]
Цитата Сообщение от Nameless One Посмотреть сообщение
alexsvk, а теперь скажи, какие значения аргументов у функции strcmp в момент "бага" и какой результат ты от нее ожидаешь (str равна s, str больше s, str меньше s)?
И да, какой смысл кастовать s к типу char*?
Debug:
s[0] = 'X';
s [1] = 'O';

А смысл в том, что мне нужно SendMessage(...,WM_SETTEXT,...,...) реализовывать, где последний параметр типа const char*. who типа char.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
27.11.2010, 20:29
Цитата Сообщение от alexsvk Посмотреть сообщение
Debug:
s[0] = 'X';
s [1] = 'O';
а теперь вопрос на засыпку: сколько ты символов выделил для массива s? Два, правильно? А в твоем массиве где-нибудь есть символ '\0'? А с какими строками работает функция strcmp? Правильно, с теми, которые заканчиваются на '\0', т.е. с null-terminated strings. А ты передал в функцию strcmp просто массив символов, в котором нет символа '\0', т.е. признака конца строки, и после этого ожидаешь, что функция будет работать правильно?
Цитата Сообщение от alexsvk Посмотреть сообщение
А смысл в том, что мне нужно SendMessage(...,WM_SETTEXT,...,...) реализовывать, где последний параметр типа const char*. who типа char.
who может быть и типа char, но в функцию setCellValue ты передаешь не who, а s, у которой и так уже тип char*. Т.е. ты кастуешь переменную с типом char* к типу char*. Лично мне это кажется бессмысленным
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
27.11.2010, 20:37  [ТС]
Цитата Сообщение от Nameless One Посмотреть сообщение
а теперь вопрос на засыпку: сколько ты символов выделил для массива s? Два, правильно? А в твоем массиве где-нибудь есть символ '\0'? А с какими строками работает функция strcmp? Правильно, с теми, которые заканчиваются на '\0', т.е. с null-terminated strings. А ты передал в функцию strcmp просто массив символов, в котором нет символа '\0', т.е. признака конца строки, и после этого ожидаешь, что функция будет работать правильно?

who может быть и типа char, но в функцию setCellValue ты передаешь не who, а s, у которой и так уже тип char*. Т.е. ты кастуешь переменную с типом char* к типу char*. Лично мне это кажется бессмысленным

Не по теме:

Прошу прощения, что за бред.


Посмотрите ещё раз код, пожалуйста, там s[1] = '\0';
Да, и ещё. Если у Вас есть лучший вариант преобразования параметра с буквой к char*, то скажите как. Буду благодарен.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
27.11.2010, 20:41
Цитата Сообщение от alexsvk Посмотреть сообщение

Не по теме:

Прошу прощения, что за бред.


Посмотрите ещё раз код, пожалуйста, там s[1] = '\0';

Не по теме:

О да, бред...


Какая разница, какое значение s[1] имело при первичной инициализации? В интересующий нас момент какое значение у s[1] нам показывает отладчик? 'O', а 'O' != '\0'
0
9 / 9 / 0
Регистрация: 15.07.2010
Сообщений: 255
27.11.2010, 20:44  [ТС]
Цитата Сообщение от Nameless One Посмотреть сообщение

Не по теме:

О да, бред...


Какая разница, какое значение s[1] имело при первичной инициализации? В интересующий нас момент какое значение у s[1] нам показывает отладчик? 'O', а 'O' != '\0'
тьфу.. прошу прощения, там s[0] = 'O'; - т.е. проблема остаётся
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
27.11.2010, 20:49
Кстати, непонятно, как могло измениться значение s[1], которое вроде было равно '\0', если с момента начальной инициализации оно не менялось (вроде бы)? Если только функция setCellValue модифицирует значение s... Если это твоя функция, попробуй изменить тип параметра с char* на const char*.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
27.11.2010, 21:54
Цитата Сообщение от Nameless One
А как должно быть правильно?
Это уже другой вопрос

Цитата Сообщение от Nameless One
а у меня выводит единицу
Я на то и сетовал
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
28.11.2010, 01:05
Цитата Сообщение от silent_1991 Посмотреть сообщение
Я заметил - log(-1) неправильно считает.

Добавлено через 1 минуту
И ещё sqrt(x) == x при x = 1 почему-то...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <math.h>
#include <errno.h>
 
int main(void)
{
    double n = log(-1);
    
    printf("%f" "\n", n);
    
    if (errno)
        perror("math");
    
    printf("%d" "\n", sqrt(1.0) == 1.0);
        
    return 0;
}
Code
1
2
3
4
5
[guest@localhost tests]$ ./t
nan
math: Numerical argument out of domain
1
[guest@localhost tests]$
C89
4.5.1 Treatment of error conditions

The behavior of each of these functions is defined for all
representable values of its input arguments. Each function shall
execute as if it were a single operation, without generating any
externally visible exceptions.

For all functions, a domain error occurs if an input argument is
outside the domain over which the mathematical function is defined.
The description of each function lists any required domain errors; an
implementation may define additional domain errors, provided that such
errors are consistent with the mathematical definition of the
function./94/ On a domain error, the function returns an
implementation-defined value; the value of the macro EDOM is stored in
errno .

Similarly, a range error occurs if the result of the function
cannot be represented as a double value. If the result overflows (the
magnitude of the result is so large that it cannot be represented in
an object of the specified type), the function returns the value of
the macro HUGE_VAL , with the same sign as the correct value of the
function; the value of the macro ERANGE is stored in errno . If the
result underflows (the magnitude of the result is so small that it
cannot be represented in an object of the specified type), the
function returns zero; whether the integer expression errno acquires
the value of the macro ERANGE is implementation-defined.
Добавлено через 4 минуты
Цитата Сообщение от Nameless One Посмотреть сообщение

Не по теме:

Кстати, asin(x) для |x|>1 только у меня не работает?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <math.h>
#include <errno.h>
 
int main(void)
{
    double n = asin(2);
    
    printf("%f" "\n", n);
    
    if (errno)
        perror("math");
    
    return 0;
}
Code
1
2
3
4
[guest@localhost tests]$ ./t
nan
math: Numerical argument out of domain
[guest@localhost tests]$
0
28.11.2010, 01:07

Не по теме:

accept, если что, это всё был сарказм)))

0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.11.2010, 01:19
Гм. Для снятия константности лучше использовать const_cast<char*> но т.к. тут нету константности, то смысла в использовании нет. Да и потом. ТС, ты может все таки объяснишь, что ты хочешь получить от сравнения строк?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.11.2010, 01:19
Помогаю со студенческими работами здесь

strcmp()
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt; using namespace std; int main() { ...

strcmp
Не могу понять, как правильно прировнять два слова. КОгда компилирую и ввожу слово, програма самостаятельно закрываеться, точне...

STRCMP
Как работает функция strcmp? strncmp? while(L&lt;R) { m=(L+R)/2; ...

strcmp
slovo={'d','d','d'}; char *slovo2=new char; for(int i=0;i&lt;k;i++) { cin&gt;&gt;slovo2; } int s=strcmp(slovo2,slovo); и ввожу...

Strcmp
Пользуюсь Visual Studio 2013. Читай книжку, выполняю примеры. Там есть пример с использованием strcmp и сказано подключить &lt;cstring&gt;....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru