【发布时间】:2016-07-23 08:50:22
【问题描述】:
我正在尝试编写一系列函数,这些函数将文件名作为输入(例如 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);
}
这个程序的主要功能只是简单地调用 format() 并带有一个包含文件名的 char*:
int main(int argc, char *argv[])
{
char *filename = "test.c";
format(filename);
return 0;
}
我不确定为什么这个程序在执行时会导致总线错误。提前感谢您提供的任何帮助。
编辑:添加主要功能代码
【问题讨论】:
-
The main function of this program simply calls format() with a char* containing a filename.:我们不在乎;我们需要代码。顺便说一句,strsep()是邪恶而危险的巫术。你应该改用strtok()。 -
如果文件名是字符串文字,那么您可能无法写入它。这可能是总线错误的原因。
-
@KemyLand 添加了
main()代码 -
改为
char filename[] = "test.c";