首页 > 解决方案 > strrcr() 函数导致内存损坏

问题描述

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

我已经检查了参数文件,没关系。

当我在输入中输入“01.jpg”时,我希望得到像“.jpg”这样的结果。
当输入为“”时,我正在等待结果中的“”。
当输入为“NA”时也一样

char * getExtensionOfFile(char * file){
  //create variable ext
  char * ext = (char*)malloc(sizeof(char)*4); 
  strcpy(ext,"");

  if(strlen(file)==0 || strcmp(file,"NA")==0) return ""; //If file is empty or useless (case file=="NA")

  sprintf(ext,"%s",strrchr(file,'.'));

  return ext;

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

我试图用char[]从头开始​​重写这个函数,但它不那么漂亮,我真的很想理解。

谢谢!

标签: c

解决方案


因此,在与其他人讨论后,有人找到了一个不错的(好?)解决方案。

谢谢你的帮助!

解决方案(不是我自己)

const char * getExtensionOfFile(const char * file){
  if (strlen(file) == 0 || strcmp(file, "NA") == 0) return "";

  return strrchr(file,'.');
}

推荐阅读