我阅读了其他文章,用C语言从文件名中查找文件扩展名,我试过了,但问题是它们无法正常工作。
这是我的代码:
void optionOne()
{
char filenameSrc[101],filenameDest[101];
strcpy(filenameSrc,"");
do
{
printf("Enter source filename (*.c) : ");
scanf("%s",filenameSrc);
}while (check_file_ext(filenameSrc) != 0);
fflush(stdout);
printf("Enter destination filename : ");
scanf("%s",&filenameDest);
char line[80];
FILE* fp = fopen("data.inp","r");
while(fgets(line,sizeof(line),fp))
{
// do something
}
fclose(fp);
}
和函数check_file_ext:
const char *get_file_ext(const char *filename)
{
const char *dot = strrchr(filename, '.');
if(!dot || dot == filename) return "";
return dot + 1;
}
int check_file_ext(const char* filename)
{
return strcmp(get_file_ext(filename),"c") == 0;
}
问题在于文件扩展名的检查方法? 你能告诉我代码中的问题在哪里吗?
答案 0 :(得分:2)
不要返回""
,而是返回指向'\0'
字节的指针:
// gcc -std=c99
#include <stdio.h>
#include <string.h>
static const char*
get_file_ext(const char *filename) {
const char *ext = strrchr(filename, '.');
return (ext && ext != filename) ? ext : (filename + strlen(filename));
}
int main() {
char *files[] = {"a.c", ".a", "a", NULL };
for (char** f = files; *f != NULL; ++f)
printf("ext: '%s'\n", get_file_ext(*f));
}
注意:它会在扩展名中包含.
以保持一致性。
ext: '.c'
ext: ''
ext: ''
反向条件:do{ ... }while(strcmp(get_file_ext(filename), ".c") != 0);