我想用C來寫一個函數,以在條目中的文件,如果文件擴展名是png返回1,JPG等分段錯誤嘗試獲取文件的擴展名用C
這是我寫的:
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(點),將顯示「 。C」。
但是,如果我嘗試輸入圖片文件(.jpg或任何其他我列出的),我有消息分段錯誤(核心轉儲)。 然後,我意識到問題來自行:
if(!strcmp(listeExtensionImage[i], dot))
如果我刪除的指令,一切都在兩者之間,那麼我沒有錯誤了。
但我不明白爲什麼我有這個問題,因爲我有同樣的程序與之相似的測試,它的工作原理:
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;
}
評論不適合廣泛的討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/129508/discussion-on-question-by-alan-segmentation-fault-error-while-trying-to-get-file) 。 – deceze