gpt4 book ai didi

c - 使用 strsep() 的总线错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:15 26 4
gpt4 key购买 nike

我正在尝试编写一系列将文件名作为输入(例如 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 位大(罕见))。

关于c - 使用 strsep() 的总线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36392042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com