- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 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я строчка?
ППС Си - говно.
absolut 31.05.2011 16:09 # 0
копирует не более strlen(ttname) символов из ttname в (spoint-10-strlen(ttname)).
Т.е в данном случае не копируется завершающий ноль.
Для того, чтобы понять первый аргумент - не помешает развернуть 10ю строку многоточий.
TarasB 31.05.2011 16:15 # 0
Я как раз оставил то, что относится к 1му аргументу.
absolut 31.05.2011 16:44 # 0
Govnoeb 31.05.2011 20:34 # 0
sayidandrtfm 31.05.2011 16:31 # +3
Способ создания строки с инфо о версии.
уже наконец.
sayidandrtfm 31.05.2011 16:42 # 0
TarasB 31.05.2011 17:02 # 0
Получилась загадка в стиле Урсуса.
SmackMyBitchUp 31.05.2011 16:56 # 0
spoint-10-strlen(ttname)
Адрес первого символа spoint - 10 - длина строки ttname O_o
sayidandrtfm 31.05.2011 17:07 # 0
SmackMyBitchUp 31.05.2011 17:21 # 0
10 - это прямо хардкод какой-то.
odmin 31.05.2011 19:09 # +3
Си - рулит.
Govnoeb 31.05.2011 20:33 # 0
Govnocoder#0xFF 31.05.2011 20:38 # 0
7ion 31.05.2011 22:27 # 0
ФСБ уже выехала.
TarasB 31.05.2011 21:59 # −2
Аффтар - рулит.
Govnocoder#0xFF 31.05.2011 20:32 # 0
sayidandrtfm 31.05.2011 21:35 # 0
TheCalligrapher 31.05.2011 23:18 # 0
absolut 01.06.2011 06:41 # 0
TheCalligrapher 01.06.2011 07:59 # +3
Назначение функции 'strncpy' - конвертирование нуль-терминированных строк (т.е. обычных С-шных строк) в строки "фиксированной ширины" (которые не обязательно нуль-терминированы). Строки фиксированной ширины использовались в файловой системе одной из старинных версий Юникса (System V). Там имя файла представлялось строкой фиксированной ширины в 14 символов. Вот специально для этого и была заведена функция 'strncpy'. Никакого отношения к ограниченному копированию нуль-терминированных строк эта функция не имеет (немотря на сбивающее с толку имя). К сожалению, функции ограниченного копирования нуль-терминированных строк в стандартной библиотеке С вообще нет.
Многие реализации однако предоставляют функцию ограниченного копирования нуль-терминированных строк по имени 'strlcpy'. Это фактически стало де-факто стандартом для имени этой функции. Т.е. пользоваться в таких случаях надо именно 'strlcpy'. Если ваша реализация такой функции не предоставляет - напишите ее сами. А пользоваться для этих целей 'strncpy' - это забивание шурупов молотком. К сожалению, многие источники тупо втирают новичкам байки о том, что 'strncpy' - это якобы "функция безопасного копирования нуль-терминированных строк в С", что является банальным враньем. А потом начинается это кривое использование 'strncpy' для "безопасного копирования"...
guest8 09.04.2019 10:51 # −999