1. Си / Говнокод #6754

    +147

    1. 1
    memcpy((void*)m_sendBuffer,(void*)jsonString,strlen(jsonString));

    3 ошибки в одной строчке))

    Запостил: r00t31337, 25 Мая 2011

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

    • показать все, что скрытоСи — говно.
      Ответить
    • показать все, что скрыто
      unique A = [d] [i $ A] [j $ A, > j != i] A[{i == j}] ? ~A{i}


      Вот это хороший язык!
      Попробуй что-нибудь поговнокодить.
      Ответить
    • >3 ошибки в одной строчке))
      Приведение к (void*) необязательно, но это и не ошибка.
      Не копируется нулевой терминатор - что с того? Он в m_sendBuffer может быть и не нужен.
      Что ещё?
      Ответить
      • strlen в символах и определяется по нуллчару
        Ответить
        • >strlen в символах и определяется по нуллчару
          и что, по-вашему, из этого может привести к ошибке?
          Ответить
          • какой нибудь утф8 сломается, нет?
            Ответить
            • Это ж C-строки, тип char то бишь. Если ноль, то только последний.
              Ответить
              • а копируем мы байты.
                Ответить
                • char это байт и есть. в C нет вообще символов-как-unicode.
                  Ответить
                  • wchar_t
                    Ответить
                    • Ага, те-же яйца, только сбоку

                      programs that need to be portable across any C or C++ compiler should not use wchar_t for storing Unicode text. The wchar_t type is intended for storing compiler-defined wide characters, which may be Unicode characters in some compilers.

                      http://www.unicode.org/versions/Unicode5.2.0/ch05.pdf
                      Ответить
                    • Если бы это был 'wchar_t', то 'strlen' бы для него не скомпилировался. В данном случае ясно, что речь идет об обычной строке. Соответственно никаких проблем в коде нет, подразумевая что он делает то, что надо. Приведение к 'void *' в С действительно не нужно.
                      Ответить
            • В utf-8 нет null'ов. Его специально делали совместимым с strlen и всей этой пиздобратией
              Ответить
        • Так можно было бы писать на нормальном языке:

          strlen X = [r-] [i] X == 0 ? i


          А на говно-си — только так:

          int strlen(char[] fukkk) { // уже тошнит
          	int fukken_length = 0;
          	for (int fukken_iterator = 0; fukkk[fukken_iterator] != 0; ++fukken_length) // буээээ
          	return fukkk;
          }
          Ответить
          • int strlen(char[] fukkk) { // уже тошнит
            	int fukken_length = 0;
            	for (int fukken_iterator = 0; fukkk[fukken_iterator++] != 0; ++fukken_length) // буээээ
            	return fukkk;
            }


            воот.
            Ответить
          • Этот сайт для вас, Си нормальный язык, если им правильно пользоваться

            int strlen(char* str)
            {
            char* begin = str;
            while(*str++ != 0);
            return str-begin;
            }
            Ответить
    • На Windows юникод, strlen вернет неверный результат. Если strlen вернет 0, то некоторые реализации memcpy могут пройтись по памяти
      Ответить
      • > некоторые реализации memcpy могут пройтись по памяти
        стало страшно. "Я сказал НОО....OH SHI~"
        Ответить
      • >На Windows юникод, strlen вернет неверный результат.
        Только вот про windows и юникод упоминаний не было.
        Да и что считать результатом, например для utf-8 вернет просто кол-во байт, что в принципе и надо для копирования. Тут же не идет речи о кол-ве знакомест.
        >Если strlen вернет 0, то некоторые реализации memcpy могут пройтись по памяти
        Это какие же реализации, назовите, пожалуйста.
        Вот если бы было отрицательное число, то точно прошлось бы по памяти.
        Ответить
      • Господа, с каких таких пор юникодные строки мерятся strlen'ом?
        Ответить
    • Сравните: нормальный язык и C++:

      max A = m, [r-o m] [i $ A] A{i} > m ? m = A{i}


      int fukken_max(int * fukken_array, int how_many_shit) {
      	int alpha_male = fukken_array[0];
      	for (int fukken_iterator = 0; fukken_iterator < how_many_shit; fukken_iterator++)
      		if (fukken_array[fukken_iterator] > alpha_male)
      			alpha_male = fukken_array[fukken_iterator];
      	return alpha_male;
      }
      Ответить
    • мемсру
      Ответить
    • фигасе у вас какая тут хрень происходит
      Ответить
      • рак с быдлочанов, хренли
        ЧСХ, скрипты для автоминусования существуют как минимум год (тарас, баттхёрт и виртуалы)
        но только после публикации скрипта на резиге началось
        Ответить
    • показать все, что скрытоvanished
      Ответить

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