Си диез / Говнокод #12642 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
fixed (char* p = "A")
{
    p[0] = 'B';
}

Console.WriteLine("A");

Immutable strings

Запостил: Ccik Ccik, (Updated )

Комментарии (19) RSS

      • Если это работает в Си или С++, а в C# даже константности нет, то логично.
        Ответить
        • Да вот в Си/C++ оно как раз не особо работает.

          Не смотрел что по поводу модификации литерала говорит стандарт, но по идее это должен быть UB. Именно UB на модификации литерала позволяет компилятору группировать одинаковые литералы в один. Без UB'а он не имел бы никакого права так делать.

          Ну и в линухе вот такой код падает с сегфолтом:
          #include <stdio.h>
          
          int main() {
              char *s = "dasd";
              s[0] = 'b';
              return 0;
          }
          Ответить
          • разве этот код не должен выдавать как минимум ворнинг?
            про то, что "куда дел константность, ирод?"
            Ответить
            • > разве этот код не должен выдавать как минимум ворнинг?
              Ну gcc в крестах выдает по дефолту. А в сишке - только если включен -Wwrite-strings, почему-то не входящий в -Wall и -Wextra. Видимо из-за того, что для сишки пихание литералов в char* долгое время считалось нормальной практикой, и при сборке говна мамонта не юзающего const типичной старой сишколибы будут сыпаться тонны ворнингов.
              Ответить
  • я помню я как-то умудрялся с помощью unsafe и fixed перезаписывать левые данные вверх по стеку и менять ход программы, ваще fun
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8