1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

В чем разница между 0 и '\0'

Тема в разделе "С и С++", создана пользователем rrrFer, 8 дек 2011.

  1. rrrFer

    rrrFer Гость

    Репутация:
    0
    хм, а я не совсем в курсе...ну на самом деле. Вроде бы Страуструп не рекомендует юзать NULL(а советует использовать 0) без особой на то причины(я такой "особой" причины не видел ни разу). '\0' - это нуль-терминатор, конец строки. Я всегда использовал вместо этого '0'(без кавычек), никакого дискомфорта и угрызений совести не замечал.
    Ну если пояснишь различия...я буду благодарен )
     
  2. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    '\0' - это однобайтовый 0. Думаю что в некоторых случаях с ним могут возникнуть проблемы, хотя он и работает в данном случае.
     
  3. rrrFer

    rrrFer Гость

    Репутация:
    0
    lazybiz
    если у тебя строка символов и ты в конец дописываешь ноль - то ты символу(1 байт) присвоил значение ноль, что эквивалентно символу '\0'.
    Вобщем, ИМХО проблем не должно возникать...Попробуй придумать пример который это демонстрирует(демонстрирует ошибки, в смысле)?
     
  4. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Конечно маловероятный вариант, но все же) :
    Код:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    void *	p_A;
    void *	p_B;
    
    int		l_A = sizeof(  0 ) * 100;
    int		l_B = sizeof( '\0' ) * 100;
    
    p_A = new char [l_A];
    p_B = new char [l_B];
    
    cout << "l_A = " << l_A << endl;
    cout << "l_B = " << l_B << endl;
    
    return 0;
    }
     
  5. rrrFer

    rrrFer Гость

    Репутация:
    0
    lazybiz
    не...ну тут ты сравниваешь символ и целое число, естественно они занимают разное количество байт, но все шло в том контексте, что этот символ должен быть на конце строки.
    А тут сравнение прошло примерно так... '1' занимает 1 байт, а 49 - занимает 4 байта.

    но
    char c = 0;
    char c = '\0';
    разницы нет, ну хотя конечно аскей коды не хорошо использовать всюду - они по-любому не упрощают восприятие кода...ну и могут различаться иногда, в зависимости от используемой кодовой таблицы.
     
  6. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Хорошо. Ты победил. Но все же правильней и наглядней писать 0 или NULL. Если функция требует void *, то дай ей void * а не int. Ну или хотя бы скасти int в void * :)
     
  7. rrrFer

    rrrFer Гость

    Репутация:
    0
    хм...хм..., я не старался )
    про 0 можно спорить ИМХО, хотя нет желания, я сам 0 пишу )
    а про NULL не соглашусь. В качестве единственного аргумента использую авторитет Страуструпа(хотя, кто-то не менее авторитетный сказал "ссылка на авторитет - не доказательство" ).
    Дак вот Страуструп пишет:
    а почему он столь злосчастен поясняет так:
    [1] Такого, т.е. указателя равного нулю, т.е. не ссылающегося ни на что.
    Ну вобщем, опять я явных причин отказываться от NULL не вижу, но если Страуструп против, да и множество программистов брызжут пеной при виде NULL - то я отказываюсь от него, ну т.к. мне не принципиально :)
     
  8. woka

    woka Гость

    Репутация:
    0
    не знаю может конечно я и не прав но на сколько я помню, то "'\0" это "терминатор-ноль" или как то похоже называется, который ставиться на конце строки.
    не в контексте этой темы, а в контексте С++.
     
  9. lazybiz

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    "\0" - это два ноля подряд. правильней будет сказать '\0'
     
Загрузка...

Поделиться этой страницей