Няшная / Говнокод #6799 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
int main(argc,argv)
int argc;
char *argv[];
{
int raw=0,httpcont=0;
int i,ilatex=0,ititle=1;
char *spoint=0;
char ttver[]=TTH_VERSION;
char ttname[20];
...
    strcpy(ttname,"Tt");
    strcat(ttname,TTH_NAME);
    strncpy(spoint-10-strlen(ttname),ttname,strlen(ttname));

Понадобился мне конвертёр TeX в HTML.
Скачал (http://hutchinson.belmont.ma.us/tth/), всё работает, но оказалось, что он не умеет работать с командой \begin{cases}
Ну я решил его подправить, благо исходник открыт.
Открыл я исходник и... решил написать с нуля свой.

ПС Посоны, что делает 13я строчка?
ППС Си - говно.

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

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

  • >что делает 13я строчка?
    копирует не более strlen(ttname) символов из ttname в (spoint-10-strlen(ttname)).
    Т.е в данном случае не копируется завершающий ноль.
    Для того, чтобы понять первый аргумент - не помешает развернуть 10ю строку многоточий.
    Ответить
  • > Посоны, что делает 13я строчка?
    #ifdef TTH_GOLD
    #define TTH_NAME "Hgold"
    #else
    #define TTH_NAME "H"
    #endif
    ...
    char tth_DOC[]="\n\
                    Version XXXX (c)1997-2010 Ian Hutchinson\n\
    ...
    if((spoint=strstr(tth_DOC,"XXXX"))){ /* Make version strings */
    ...

    Способ создания строки с инфо о версии.

    printf(spoint);
    уже наконец.
    Ответить
  • Чет не понял
    spoint-10-strlen(ttname)
    Адрес первого символа spoint - 10 - длина строки ttname O_o
    Ответить
  • За одно только использование 'strncpy' для "ограниченного копирования" - расстрел на месте.
    Ответить
    • Чем плох strncpy? Кроме некопирования нуля в отдельных случаях конечно.
      Ответить
      • 'strncpy' плох тем, что для таких целей совершенно не предназначен.

        Назначение функции 'strncpy' - конвертирование нуль-терминированных строк (т.е. обычных С-шных строк) в строки "фиксированной ширины" (которые не обязательно нуль-терминированы). Строки фиксированной ширины использовались в файловой системе одной из старинных версий Юникса (System V). Там имя файла представлялось строкой фиксированной ширины в 14 символов. Вот специально для этого и была заведена функция 'strncpy'. Никакого отношения к ограниченному копированию нуль-терминированных строк эта функция не имеет (немотря на сбивающее с толку имя). К сожалению, функции ограниченного копирования нуль-терминированных строк в стандартной библиотеке С вообще нет.

        Многие реализации однако предоставляют функцию ограниченного копирования нуль-терминированных строк по имени 'strlcpy'. Это фактически стало де-факто стандартом для имени этой функции. Т.е. пользоваться в таких случаях надо именно 'strlcpy'. Если ваша реализация такой функции не предоставляет - напишите ее сами. А пользоваться для этих целей 'strncpy' - это забивание шурупов молотком. К сожалению, многие источники тупо втирают новичкам байки о том, что 'strncpy' - это якобы "функция безопасного копирования нуль-терминированных строк в С", что является банальным враньем. А потом начинается это кривое использование 'strncpy' для "безопасного копирования"...
        Ответить
  • и M?R,U,I(U S$H"P"G,L"N$K:C!A.H$Y"K,E!I)T(A.L"V)E O(F:F)X(M?H"X"O"F.D,AM$WU(W,Q?Q:K"M,P.J$V"F$O)V?U QP:J,K P,Q B"F,T"Y?N"K(Q!M(D.C$U)T.B(Y)E!E(P!L(K(Z!B,K$W$T?B:O"X,K?N?C(VV.O(C(ZX(Z,H)R.N(Y"T?R,U(Y(S?G:PJ:C.N:C$O?L.L(N?E?L:K(K$Z$L.M)KD.Z!K"Y(H)V,V!E!S:Q"H,Q M:KU(W N,Y L$O"I,Q,X$D.Y$M)F,B)I.D,B:G,G.YZ:I C:W.B(X,I!E:H(R.M$H!I EG?L)GM(I(J:R!H)L:X(P?E:L?H:B,O(M?T"Z!I(C)J)L)O)S!IQ(H!P!E(YB?B(B?L.D,D:T(C(E!Z!O!Y"E:V!W:B$H!Z:K!B)V$F!E W:G.R!S?Q"GZ"K E B$W!U"X:L.Z(B,H?U:R!D(Q"K,W(K!A?T S!K(CP$M$K"H!U.LM$E$J,MK(E,W?J(Y$C,J?B$P"M O"A$R,Y"U?W)M:M?B F(H(G,Y?T M(J$F(U$U.P?E,JT E.Z Z)C$U)F$U.C,N!A?N D!R$P:W,C I OD:H!S)Z$U(V T(M$O.F"W:X,P.X M!Y!O"P(L,W"X$A:Y$B:L(M"T:GV$U"L"NA:T"H)D?P!U(X OC?D"J.O?Y:M?B I$C.O?EM"D$H"DB,JTA:I.U.NU(M R.SC!T.Q.B(R$I)A)H(V?K)B?D$P)ZX,K$E"H.T FR"G)N.I,N:P"I:N:Y(F$W)Y)E,RB:T"FG K$L N D.H)Z"Q(IW!F K$YY X$P$O?Z!Y Q,O,Z L)QW.H$R V:C!X,W"N?T"J!OQ"D,X$Q?C(C M(Q,Y.R!BДMADFUOXBNYAMPEIRRXIGMDUEVHZRORMFMRKZHCOUOUIEBDMLEWMSPKKBGJFS
    Ответить

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

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

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


    8