我正在尝试使用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)
。我知道它与指针有关,但我无法弄清楚。任何帮助将不胜感激。
答案 0 :(得分:3)
您的代码正在尝试更改常量字符串"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