使用 strsep() 的总线错误
Bus Error Using strsep()
我正在尝试编写一系列函数,将文件名作为输入(例如 main.c)并使用 strsep() return 文件扩展名。当我 运行 程序时,每当调用 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 位大(罕见))。
我正在尝试编写一系列函数,将文件名作为输入(例如 main.c)并使用 strsep() return 文件扩展名。当我 运行 程序时,每当调用 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 位大(罕见))。