c - 在C中以小写形式获取文件扩展名

标签 c pointers file-extension

我正在尝试用 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) 第一行之后。我知道这与指针有关,但我无法弄清楚。任何帮助将不胜感激。

最佳答案

您的代码试图更改常量字符串 "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

关于c - 在C中以小写形式获取文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56421520/

相关文章:

c - 如何从数组打印输入数据文件中的值?

c++ - 如何将相同的签名分配给具有不同签名的函数?

c - 如果我们改变 char* ptr = ; 指针指向的地址会改变吗?

c - C指针的 "**&ptr"和 "2**ptr"是什么意思?

javascript - 正则表达式:我还应该使用其他东西来实现我想要的吗?

file-extension - 有关.MI文件扩展名的信息?

c++ - 潜在的内存泄漏?

c - 如何检查 C 中的字符串是否为空(到目前为止没有任何效果)

java - C 或 Java 的非玩具软件事务内存

.net - .NET 中的文件扩展名和 MIME 类型