首页 > 解决方案 > 如何摆脱这种分段错误?

问题描述

我正在尝试创建一个从文件名中提取扩展名的函数。file_name 指向一个包含文件名的字符串。该函数应将文件名的扩展名存储在扩展名指向的字符串中。例如,如果文件名为“memo.txt”,该函数会将“txt”存储在扩展名指向的字符串中。如果文件名没有扩展名,该函数应该在扩展名指向的字符串中存储一个空字符串(单个空字符)。

这就是我所拥有的:

  #include <stdio.h>

void get_extension(char *file_name, char *extension);
int main(){
    char *ex;
    get_extension("hello.txt", ex);

    char *p;
    for(p = ex; *p != '\0'; p++){
        printf("extension: %c", *p);
    }

    return 0;
}

void get_extension(char *file_name, char *extension){

    char *p;

    for (p = file_name; *p != '\0'; p++){

        if(*p == '.'){
            p++;

            while(*p != '\0'){
                *extension = *p;
                p++;
                extension++;
            }
        }  *extension = '\0';
    }

}

我不断收到分段错误错误,我不知道出了什么问题。有人能帮助我吗?谢谢!

标签: csegmentation-fault

解决方案


你应该改变这部分:

int main(){
    char *ex;

变成不仅声明一个指针,而且分配内存来存储结果的东西:

int main(){
    char ex[100];

此外,我建议您看一下strrchr()可以帮助您更轻松地找到扩展名:Getting file extension in C


另外我想注意到这段代码:

char *p;
for(p = ex; *p != '\0'; p++){
    printf("extension: %c", *p);
}

不会像你想象的那样工作。例如“hello.txt”将打印:

extension: textension: xextension: t

不确定这是否是您想要的。


推荐阅读