gpt4 book ai didi

c - 查找和检查文件扩展名

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:08 25 4
gpt4 key购买 nike

我阅读了其他有关从 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'字节的指针:

// 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));
}

注意:为了保持一致性,它在扩展名中包含 .

Output

ext: '.c'
ext: ''
ext: ''

反向条件:do{ ... }while(strcmp(get_file_ext(filename), ".c") != 0);

关于c - 查找和检查文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052037/

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