首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用strsep()的总线错误

使用strsep()的总线错误
EN

Stack Overflow用户
提问于 2016-04-03 22:30:52
回答 1查看 294关注 0票数 1

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

代码语言:javascript
复制
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*调用格式(),其中包含一个文件名:

代码语言:javascript
复制
int main(int argc, char *argv[])
{
        char *filename = "test.c";
        format(filename);

        return 0;
}

我不知道为什么这个程序在执行时会导致总线错误。谢谢您能提供的任何帮助。

编辑:新增主要功能代码

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-03 22:55:40

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

代码语言:javascript
复制
char filename[] = "test.c";

以创建可写char数组。

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

此外,get_ext也可以简单地是:

代码语言:javascript
复制
return strsep(filename, ".");

sizeof(char)被定义为1(即1字节--即使这个字节不是8位大(罕见))。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36392042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档