- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
/* возвращает в buf последние 4 символа имени файла filename */
void getfileext(unsigned char *buf, unsigned char *filename)
{
int i, j;
for (i = strlen((char *) filename) - 4, j = 0; i < strlen((char *) filename); i++, j++)
buf[j] = filename[i];
return;
}
TarasB 06.04.2011 10:04 # +3
А если длина имени меньше 4?
turdman 06.04.2011 10:06 # 0
absolut 06.04.2011 11:10 # 0
будет простое копирование мусора в начале, главное чтобы в buf было достаточно места, но это никак не связано с длиной filename. с третьим - может быть.
gegMOPO4 06.04.2011 12:09 # +1
absolut 06.04.2011 12:45 # 0
gegMOPO4 06.04.2011 13:01 # +3
absolut 06.04.2011 13:28 # 0
gegMOPO4 06.04.2011 14:25 # +3
turdman 06.04.2011 12:11 # 0
SIGSEGV 06.04.2011 10:34 # +3
absolut 06.04.2011 11:06 # +5
absolut 06.04.2011 11:15 # +1
strcpy( buf, filename + strlen(filename) - 4 );
TarasB 06.04.2011 12:03 # 0
turdman 06.04.2011 12:08 # 0
TarasB 06.04.2011 12:10 # −5
turdman 06.04.2011 12:13 # 0
TarasB 06.04.2011 12:16 # −3
Без явной арифметики указателей.
turdman 06.04.2011 12:23 # +3
absolut 06.04.2011 12:11 # 0
TarasB 06.04.2011 13:19 # 0
Govnocoder#0xFF 06.04.2011 11:26 # −2
SadKo 06.04.2011 11:49 # −2
int len = strlen(filename);
if (len >= 4)
strcpy(buf, filename[len - 4]);
else
buf[0] = '\0';
turdman 06.04.2011 11:55 # 0
длинна известна, так что можно обойтись memcpy
strlen возвращает size_t, а не int
absolut 06.04.2011 11:56 # +1
gegMOPO4 06.04.2011 12:13 # +6
Сигнатура функции тоже доставляет.
SIGSEGV 06.04.2011 19:13 # 0
gegMOPO4 07.04.2011 20:29 # −1
ctm 06.04.2011 14:13 # +1
readme
stdio.h
я уж не говорю про длинные имена: test.local
и совсем уж все плохо для файла/папки ".." например
absolut 06.04.2011 20:21 # +4
guest 15.04.2011 09:15 # 0
Lure Of Chaos 06.04.2011 22:21 # +2
REDNES 24.08.2021 01:03 # 0