Я продолжаю получать EXC_BAD_ACCESS на строке внутри цикла while.
while (*filename != '.')
{
*(ext++) = *(--filename);
}
выше, вы рассматриваете 'ext' как указатель, однако 'ext' объявляется как массивесли вы хотите использовать указатель, то объявите другой указатель и укажите его в 'ext'
while (*filename) {
filename++;
}
в приведенном выше цикле while, вы перемещаете указатель 'filename' до тех пор, пока он не попадет в '\ 0', чтохорошо, но вместо этого вы можете начать с конца имени файла, поместив себя в последний '.'вот так:
char *p = filename + strlen( filename ) - 1; // last char
затем двигайтесь вперед
while (*p != '.') --p;
теперь вы p там, где '.'is
теперь копировать из p + 1
strcpy( ext, p + 1 );
, когда вы возвращаете, вы не можете вернуть 'ext', потому что он не существует вне тела функции.
способсделать это - либо передать ext в качестве дополнительного аргумента функции, где вы выделяете ext вне функции, либо использовать пространство выделения кучи для расширения
char *getFileExt(char *filename,char *ext)
или даже лучше
char *getFileExt(char *filename,char *ext, size_t maxlen_ext)
или
char *getFileExt(char *filename)
{
char* ext = malloc( 10 );
...