gpt4 book ai didi

c - 尝试在 C 中获取文件扩展名时出现段错误错误

转载 作者:行者123 更新时间:2023-11-30 15:02:59 26 4
gpt4 key购买 nike

我正在尝试用 C 语言编写一个函数,接收一个文件的条目,如果文件扩展名是 png、jpg 等,则返回 1。

这是我写的:

int estImage(struct dirent *fichier)
{
char nomFichier[256];
strncpy (nomFichier, fichier->d_name, 255);

char *dot = strrchr(nomFichier, '.');

char * listeExtensionImage[] = {".png", ".jpg", ".jpeg", ".bmp" };
int len = sizeof(listeExtensionImage)/sizeof(listeExtensionImage[0]);

printf(dot); //Just to test

for (int i=0; i<len; i++)
{
if(!strcmp(listeExtensionImage[i], dot))
return 1;
else
return 0;
}
}

如果我在条目中放入一个不是图片的文件(例如 .c 文件),那么它将毫无问题地返回 0,并且 printf(dot) 将显示“.c”。

但是,如果我尝试输入图片文件(.jpg 或我列出的任何其他文件),则会收到消息段错误(核心已转储)。然后,我意识到问题出在这一行:

if(!strcmp(listeExtensionImage[i], dot))

如果我删除 for 指令以及中间的所有内容,那么我就不会再遇到错误了。

但我不明白为什么会出现这个问题,因为我在同一个程序中进行了类似的测试,并且它有效:

int estExecutable(struct dirent *fichier) 
{
char nomFichier[256]; // Variable qui contiendra le nom du fichier
strncpy (nomFichier, fichier->d_name, 255);
const char *dot = strrchr(nomFichier, '.');
if(strcmp(dot,".exe")==0)
{
printf(nomFichier);
return 1;
}
else
return 0;
}

这个函数确实有效,但我不明白我的两个函数有什么区别。有人能帮助我吗?谢谢!

编辑:也尝试了这个版本,但得到了相同的错误:

int estImage(struct dirent *fichier)
{

char nomFichier[256]; // Variable qui contiendra le nom du fichier
strncpy (nomFichier, fichier->d_name, 255);
char *dot = strrchr(nomFichier, '.');

int retour=0;

if( (!strcmp(dot,".jpg")) || (!strcmp(dot,".png")) || (!strcmp(dot,".jpeg")) || (!strcmp(dot,".bmp")) )
retour = 1;

return retour;
}

最佳答案

你想要这个:

int estImage(struct dirent *fichier)
{
char nomFichier[256];
strncpy (nomFichier, fichier->d_name, 255);

char *dot = strrchr(nomFichier, '.');

if (dot == NULL)
return 0; // no extension => it's not an image

char * listeExtensionImage[] = {".png", ".jpg", ".jpeg", ".bmp" };
int len = sizeof(listeExtensionImage)/sizeof(listeExtensionImage[0]);

printf(dot); //Just to test

for (int i=0; i<len; i++)
{
if (strcmp(listeExtensionImage[i], dot) == 0)
return 1; // image extension found
}

return 0; // no image extension found
}

关于c - 尝试在 C 中获取文件扩展名时出现段错误错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40905819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com