繁体   English   中英

使用 strsep() 的总线错误

[英]Bus Error Using strsep()

我正在尝试编写一系列将文件名作为输入(例如 main.c)并使用 strsep() 返回文件扩展名的函数。 当我运行程序时,每当调用 strsep 函数时,我都会收到总线错误。 这是代码:

static char *get_extn(char **filename)
{
        char *delim = ".";
        strsep(filename, delim);

        return *filename;
}

void format(char *filename)
{
        char *extn = malloc(256 * sizeof(char));

        strncpy(extn, get_extn(&filename), 256);
        printf("extn: %s\n", extn);
}

该程序的主要功能只是使用包含文件名的 char* 调用 format():

int main(int argc, char *argv[])
{
        char *filename = "test.c";
        format(filename);

        return 0;
}

我不确定为什么这个程序在执行时会导致总线错误。 预先感谢您提供的任何帮助。

编辑:添加了主要功能代码

不能保证字符串文字的内存是可写的。

char filename[] = "test.c";

来创建一个可写的字符数组。

在我的系统上,此内存被保护为只读,并且试图违反此保护会生成段错误。

此外, get_ext 可以简单地为:

return strsep(filename, ".");

并且sizeof(char)被定义为 1(即 1 个字节——即使该字节不是 8 位大(罕见))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM