C 函数导致内存损坏

C 函数导致内存损坏,c,C,我只是尝试编写一个小函数,使用strrchr()(string.h)获取文件(char*file)的扩展名。 但是,我有一个问题,这个函数会导致内存损坏错误(我不知道确切的原因) 我已经检查了参数文件,没问题 当我在输入中输入“01.jpg”时,我希望得到类似“.jpg”的结果。 当输入为“”时,结果为“”。 当输入为“NA”时相同 我认为罪犯是strrchr()。 如果这是真的,为什么?如果没有?哪个 我试图用char[]从头重写这个函数,但它不太漂亮,我真的想理解 谢谢 所以,在与其他人讨论

我只是尝试编写一个小函数,使用strrchr()(string.h)获取文件(char*file)的扩展名。 但是,我有一个问题,这个函数会导致内存损坏错误(我不知道确切的原因)

我已经检查了参数文件,没问题

当我在输入中输入“01.jpg”时,我希望得到类似“.jpg”的结果。
当输入为“”时,结果为“”。
当输入为“NA”时相同

我认为罪犯是strrchr()。 如果这是真的,为什么?如果没有?哪个

我试图用char[]从头重写这个函数,但它不太漂亮,我真的想理解


谢谢

所以,在与其他人讨论之后,有人找到了一个很好的解决方案

谢谢你的帮助

解决方案(不是我自己)

const char*getextensionoffice(const char*file){
if(strlen(file)==0 | | strcmp(file,“NA”)==0)返回“”;
返回strrchr(文件“.”);
}

建议保持简单

#include <string.h>

char * returnExtension( char * filename )
{
    char * ext;
    if( (ext = strchr( filename, '.'))
    {
        return ext;
    else
    {
        return "";
    }
}
#包括
char*returnExtension(char*filename)
{
字符*ext;
如果((ext=strchr(文件名“.”)
{
返回ext;
其他的
{
返回“”;
}
}

您需要
5
字节来存储
.jpg
。为字符串NUL终止符增加一个字节。此外,
strchr
本身不会导致内存损坏。尽管您使用它的方式可能会导致内存损坏。您是否尝试过在调试器中单步执行以找出哪里出错?提示:不要使用
sprintf
将愉快地在缓冲区边界之外跺脚。使用诸如在哪里可以准确地告诉它缓冲区有多大,如果出现问题,它将出错。
返回“”;
会导致内存泄漏。根据定义,
sizeof(char)始终是一个。如果没有找到<代码> ./COD>,NULL将返回,因此调用方将不得不处理它;您可能想考虑TAHT中的“返回代码< >”<代码>而不是NULL。case@M.M更准确地说,返回一个指向输入字符串末尾的指针,该指针相当于一个空字符串。
return“”
不太理想。
#include <string.h>

char * returnExtension( char * filename )
{
    char * ext;
    if( (ext = strchr( filename, '.'))
    {
        return ext;
    else
    {
        return "";
    }
}