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

Почему L"-0" != L"-0" ?

24.07.2015, 16:07. Показов 1197. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Передаю приложению параметры запуска и сравниваю их в коде со значениями для идентификации опции. Вопрос, почему сравнение даёт ложный результат?
 Комментарий модератора 
Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2015, 16:07
Ответы с готовыми решениями:

Почему возможно задать массив с размером -1 (почему такое вообще компилируется)?
Всем привет. Долгое время не писал на плюсах, решил пройтись по основам, вспомнить. По...

Програма почему-то выдает x=7. Почему так не знаю но должно выдать 216
#include <iostream> #include <cmath> using namespace std; int main() { int d = 5; ...

Почему методы пишутся без классов? Почему с маленький буквы?
Сам пишу на C# и поэтому код в C++ мне чужд. Приведу в пример код написанный "на коленке", как...

Почему выводится в виде таблицы и почему не работает сортировка
почему выводится в виде таблицы? почему не работает сортировка? и как туда можно вставить классы...

16
18 / 18 / 4
Регистрация: 05.06.2012
Сообщений: 1,020
24.07.2015, 16:09  [ТС] 2
Это ссылки наверное.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.07.2015, 16:12 3
Лучший ответ Сообщение было отмечено VoltDeMar как решение

Решение

VoltDeMar, Потому что используйте wcscmp/wcsncmp, ибо сравнение операторами просто сравнит указатели.
1
18 / 18 / 4
Регистрация: 05.06.2012
Сообщений: 1,020
24.07.2015, 16:14  [ТС] 4
Цитата Сообщение от ForEveR Посмотреть сообщение
ибо сравнение операторами просто сравнит указатели.
А что такое оператор и чем отличается от переменной ?
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
24.07.2015, 17:57 5
Тем же, чем дорожный указатель "Москва" отличается от Москвы.
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
24.07.2015, 18:14 6
ForEveR, я читал, что от реализации зависят адреса одинаковых литералов
0
52 / 52 / 23
Регистрация: 01.06.2015
Сообщений: 189
24.07.2015, 21:39 7
Простой, и думаю, понятный пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
 
int main()
{
    const wchar_t str1[]=L"-0";
    const wchar_t str2[]=L"-0";
 
    cout << (void*)str1 << endl;  //  выводит указатель на строку str1, т.е. адрес в памяти, где начинается эта строка
    cout << (void*)str2 << endl;  //  выводит указатель на строку str2, т.е. адрес в памяти, где начинается эта строка
 
    if(str1 != str2){   //  сравнивает эти указатели
    //...
    }
    return 0;
}
Так вот при:
C++
1
2
3
if(str1 != str2){
//...
}
что аналогично записи:
C++
1
2
3
if(L"-0" != L"-0"){
//...
}
эти указатели и будут сравниваться, а не сами строки.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
24.07.2015, 21:45 8
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
я читал, что от реализации зависят адреса одинаковых литералов
...
2.14.5 String literals
8. Ordinary string literals and UTF-8 string literals are also referred to as narrow string literals. A narrow string literal has type “array of n const char”, where n is the size of the string as defined below, and has static storage duration

12.Whether all string literals are distinct (that is, are stored in nonoverlapping objects) is implementation-defined. The effect of attempting to modify a string literal is undefined.
1
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
24.07.2015, 21:48 9
Visual C++ 2008 SP1, оптимизации отключены:
C++
1
printf("%d\r\n", "hello" == "hello");
Вывод:
> 0
Visual C++ 2008 SP1, оптимизации отключены + добавлен флаг
/GF (Enable String Pooling):
C++
1
printf("%d\r\n", "hello" == "hello");
Вывод:
> 1
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
24.07.2015, 21:51 10
Croessmah, ну так реализации могут и не соответствовать стандарту
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
24.07.2015, 21:56 11
Строковые литералы в Си/Си++

Добавлено через 2 минуты
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
ну так реализации могут и не соответствовать стандарту
тогда гореть им в пламени моей "печушки"... сейчас в топке всего ~570 градусов, но могу и до тысячи нагнать при желании

А в данном случае в стандарте сказано "implementation-defined", то бишь определяется реализацией и стандарт тут не поможет.
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
24.07.2015, 21:57 12
Croessmah,

Почему L"-0"  !=  L"-0" ?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
24.07.2015, 21:59 13
Ferrari F1, во-первых, причем тут стандарт Си? Во-вторых, я уже привел цитату из стандарта C++
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
24.07.2015, 22:01 14
Croessmah, мне все равно, я ориентируюсь только на ту инфу, которую я читал
0
Croessmah
24.07.2015, 22:07
  #15

Не по теме:

Цитата Сообщение от Ferrari F1 Посмотреть сообщение
мне все равно, я ориентируюсь только на ту инфу, которую я читал
Удачи! Советую так сказать работодателю...

0
Ferrari F1
24.07.2015, 22:11
  #16

Не по теме:

Croessmah, дак надоело всякий раз видеть этот беспредел, когда ктото с репутацией за тыщу (т.е. человек, имеющий авторитет на форуме) кидается всякими строчками из стандарта, в которых черти што пойми написано!
Я не хочу мириться с таким положением вещей

0
Croessmah
24.07.2015, 22:14     Почему L"-0" != L"-0" ?
  #17

Не по теме:

Цитата Сообщение от Ferrari F1 Посмотреть сообщение
кидается всякими строчками из стандарта
сугубо нужными
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
в которых черти што пойми написано!
там вся правда :D
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
Я не хочу мириться с таким положением вещей
а вот тут уже мне плевать, это сугубо Ваше мнение...
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
надоело всякий раз видеть этот беспредел
Вы еще комитетчиков не видели... эти гады еще и меняют стандарт время от времени :rofl:

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.07.2015, 22:14

Почему у функции main() тип int? Почему не может быть какой-то другой, например, char?
Схема, касательно возвращаемого значения понятна. Не понятно почему именно целочисленное. Хелп)

IDE wxDev-C++, при создании кнопки на форме она почему-то становится во весь экран, почему?
То есть ребята не смешно ни разу. Создаю форму, кидаю кнопку, ничего не предвещает плохого. Собираю...

Почему не взяли на обучение в CQG, на сайте нашел испытательное задание, сделал и отослал. Не взяли и не объяснили почему. Хочу услышать мнения.
/ Программа получает на вход текстовый файл и расшифровывает его первую строчку получая ключ. // ...

Почему MS-DOS не любит кириллицу ? (Или почему она не любит меня ?)
Здравствуйте Почему MS-DOS не любит кириллицу ? У меня есть несколько консольных проектор...

А почему нельзя передавать в ф-ю добавления элемента в стек один указатель? Почему нужен именно указатель на указатель?
Вот код ф-ии добавления элемента в стек: void push1(Node **top, int d) { // top...

Участок B кода выполняется позже, чем участок A кода, но почему-то B влияет на работоспособность A! Почему?
Друзья! То есть суть такая, создаю объект и в конструктор передаю имя процесса и хэндл снимка...

Почему 0/(-5) == -0
Здравствуйте, не могу понять почему этот код выводит -0. Может кто-то объяснить? #include...


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

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