Получить расширение файла в нижнем регистре в C - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь получить расширение файла в нижнем регистре в C.

Я видел следующие ссылки:

и объединили их в следующее.

#include <stdio.h>
#include <string.h>

char *get_filename_ext(char *filename) ;
void stringLwr(char *s) ;

int main(void) {

    char *ext ;

    ext = get_filename_ext("test.PDF") ;
    printf("Ext: %s\n", ext) ;
    stringLwr(ext) ;
    printf("Ext: %s\n", ext) ;

    return 0;
}

char *get_filename_ext(char *filename) {
    char *dot = strrchr(filename, '.');
    if(!dot || dot == filename) return "";
    return dot + 1;
}

void stringLwr(char *s){
    int i=0;
    while(s[i]!='\0'){
       if(s[i]>='A' && s[i]<='Z'){
          s[i]=s[i]+32;
       }
       ++i;
    }
}

Что я исключаю, это Ext: PDF, за которым следует Ext: pdf. Тем не менее, я получаю Segmentation fault (core dumped) после первой строки. Я знаю, что это связано с указателем, но я не могу понять это. Любая помощь будет оценена.

1 Ответ

3 голосов
/ 03 июня 2019

Ваш код пытается изменить постоянную строку, "test.PDF", что недопустимо в C. Вам нужно сохранить строку в доступной для записи памяти, и проблема исчезнет:

char filename[] = "test.PDF"
char *ext = get_filename_ext(filename) ;
// ext now points to memory inside filename, and
// we can write to it
...