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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
#1

Баг strcmp - C++

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

Линк на архив с видео, где записана ошибка.
http://upload.com.ua/get/902136351/Bug.zip
Пароль: bug
Объясните ситуацию.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2010, 18:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Баг strcmp (C++):

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

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

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

Strcmp - C++
Пользуюсь Visual Studio 2013. Читай книжку, выполняю примеры. Там есть пример с использованием strcmp и сказано подключить <cstring>. У...

strcmp() - C++
#include "stdafx.h" #include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { ...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Somebody
2789 / 1603 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
27.11.2010, 19:23 #2
Неужели нельзя залить на файлообменник, где не надо ждать минуту со всякой рекламой?
X больше, чем O, возвращается любое положительное число, не обязательно единица. А там проверка на true.
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
27.11.2010, 19:29  [ТС] #3
Цитата Сообщение от Somebody Посмотреть сообщение
Неужели нельзя залить на файлообменник, где не надо ждать минуту со всякой рекламой?
X больше, чем O, возвращается любое положительное число, не обязательно единица. А там проверка на true.
на true та же ситуация
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
27.11.2010, 19:34 #4
alexsvk, за такую тему забанить мало
оформляйте тему нормально
0
CoolProgger
0 / 0 / 0
Регистрация: 27.11.2010
Сообщений: 5
27.11.2010, 19:43 #5
запомните у стандартных функций нет багов
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
27.11.2010, 19:47 #6
А ТС знает, что strcmp возвращает ноль, если две строки равны, т.е. значение, которое в остальных случаях интерпретируется как ложь?
Кстати, а что мешает выложить тот участок кода, где был замечен "баг", вместо того, чтобы мучаться с записью видео/выкладыванием его на файлообменник и заставлять мучаться других при его скачивании?

Не по теме:

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

0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.11.2010, 19:58 #7
Я заметил - log(-1) неправильно считает.

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

Не по теме:

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

0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
27.11.2010, 20:12  [ТС] #9
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
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
27.11.2010, 20:15 #10
alexsvk, а теперь скажи, какие значения аргументов у функции strcmp в момент "бага" и какой результат ты от нее ожидаешь (str равна s, str больше s, str меньше s)? Судя по твоему коду, setCellValue должно срабатывать, когда str больше, чем s. Я прав?
И да, какой смысл кастовать s к типу char*?
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
27.11.2010, 20:20  [ТС] #11
Цитата Сообщение от 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
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
27.11.2010, 20:29 #12
Цитата Сообщение от 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
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
27.11.2010, 20:37  [ТС] #13
Цитата Сообщение от 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
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
27.11.2010, 20:41 #14
Цитата Сообщение от alexsvk Посмотреть сообщение

Не по теме:

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


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

Не по теме:

О да, бред...


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

Не по теме:

О да, бред...


Какая разница, какое значение s[1] имело при первичной инициализации? В интересующий нас момент какое значение у s[1] нам показывает отладчик? 'O', а 'O' != '\0'
тьфу.. прошу прощения, там s[0] = 'O'; - т.е. проблема остаётся
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2010, 20:44
Привет! Вот еще темы с ответами:

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

[Visual C++]strcmp() - C++
Нужно слова, которые считываются в буфер stroka, отсортировать по алфавиту с пом. strcmp. Ошибка в том, что в условии if (strcmp(...

реализация strcmp - C++
помогите написать реализацию strcmp Функция должна принимать два указателя на сравниваемые строки (возможно Вы должны указать...

strcmp не работает! - C++
Ниже изложенная функция должна проверять не выходит ли за данный диапазон введенное число. Загвоздка вот в чем: strcmp сравнивает строки...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.11.2010, 20:44
Ответ Создать тему
Опции темы

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