c-我如何摆脱这个分割错误



我正在尝试创建一个从文件名中提取扩展名的函数。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 != ''; p++){
        printf("extension: %c", *p);
    }
    return 0;
}
void get_extension(char *file_name, char *extension){
    char *p;
    for (p = file_name; *p != ''; p++){
        if(*p == '.'){
            p++;
            while(*p != ''){
                *extension = *p;
                p++;
                extension++;
            }
        }  *extension = '';
    }
}

我不断地得到一个分割错误,我不知道哪里出了问题。有人能帮我吗?谢谢

您的seg错误可能有两个原因。

1( ex不指向任何内存。因此,在函数内部,您可以使用未初始化的指针写入内存位置。真糟糕。

2( 在函数中,内部while循环一直持续到字符串结束。然后外循环递增p并取消对它的引用。所以您读取的内容超出了字符串的末尾,这又是非常糟糕的。

试试看:

#include <stdio.h>
#define MAX_EXT_LEN 100
void get_extension(char *file_name, char *extension, int sz);
int main(){
    char ex[MAX_EXT_LEN];  // Create an array to store the data
    get_extension("hello.txt", ex, sizeof ex);
    char *p;
    printf("extension: ");
    for(p = ex; *p != ''; p++){
        printf("%c", *p);
    }
    return 0;
}
void get_extension(char *file_name, char *extension, int sz){
    char *p = file_name;
   if (file_name == NULL || extension == NULL || sz < 1) return;
    while (*p != '' && *p != '.') ++p;
    if(*p == '.') ++p;
    int cnt = 0;
    while(*p != '' && cnt < (sz-1)){
        extension[cnt] = *p;
        ++p;
        ++cnt;
    }
    extension[cnt] = '';
}

您应该更改此部分:

int main(){
    char *ex;

转换为不仅声明指针,而且分配内存来存储结果的东西:

int main(){
    char ex[100];

此外,我建议你看看strrchr(),它可以帮助你更容易地找到扩展名:在C 中获得文件扩展名


我也想注意到这个代码:

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

不会像你想象的那样奏效。例如,对于"hello.txt"将打印:

extension: textension: xextension: t

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

相关内容

  • 没有找到相关文章

最新更新