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