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

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

  1. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

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

    lazybiz Well-Known Member
    C\C++ Team

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

    rrrFer Well-Known Member
    Команда форума C\C++ Team

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Конечно маловероятный вариант, но все же) :
    Код (C++):
    #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 Well-Known Member
    Команда форума C\C++ Team

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

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

    lazybiz Well-Known Member
    C\C++ Team

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

    rrrFer Well-Known Member
    Команда форума C\C++ Team

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

    woka Гость

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

    lazybiz Well-Known Member
    C\C++ Team

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

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