【发布时间】:2014-12-15 22:39:09
【问题描述】:
我收到了一个我不知道如何解决的核心转储。我搜索了其他问题并用谷歌搜索了我的问题,但我就是不知道如何解决这个问题......
代码如下:
const char checkExtension(const char *filename)
{
const char *point = filename;
const char *newName = malloc(sizeof(filename-5));
if((point = strrchr(filename,'.palz')) != NULL )
{
if(strstr(point,".palz") == 0)
{
strncpy(newName, filename, strlen(filename)-5);
printf("%s\n",newName ); // the name shows correctly
return newName; // Segmentation fault (core dumped)
}
}
return point;
}
该函数被称为char checkExtensions(const char *filename)。由于我在网上找到的解决方案,我添加了 const,但到目前为止我还无法使其工作......
提前感谢您的帮助!
【问题讨论】:
-
字符串在 C 中由“char *”或“const char *”表示。您的函数,如所写,返回一个“const char”(注意缺少指针)。
-
@JoshPetrie 所以我不能返回一个字符?我必须从参考中返回它?
-
是的,您必须返回
char *。但请注意,您的函数存在内存管理问题。调用者不知道他们是否需要释放返回值 -
filename-5是一个指针,所以sizeof(filename-5)是一个指针的大小。sizeof的使用由 编译器 评估。这绝对不是你想要的。您根据指针大小分配了 4 或 8 个字节。你不是故意的。查看您对strncpy的电话。 -
你真正需要弄清楚的是这个函数应该做什么。它的规格是什么?
标签: c string segmentation-fault return