提取文件的扩展名

一些细节

  • 语言:C
  • 系统:Linux; 使用命令行(终端),通过终端读入文件
  • C用户体验:3个月

我一直在尝试提取给定文件的扩展名,例如“myfile.wld”,以便稍后我可以检查是否在终端上输入了正确的文件类型文件。 这对于作业来说是必要的

我使用函数“strtok”将输入分隔为分隔符“。”。

dot=strtok(argv[1], "."); filename=dot; 

文件名现在是输入“myfile”的第一部分,我的问题是如何在“。”之后进入第二部分,请提出建议,并请耐心等待,使其尽可能简单,以便我可以制作使用你的回复

谢谢

 char *extension; extension=strtok(NULL, "."); 

在你的代码之后。

首先,使用指向str指针调用strtok() ,如strtok(str, ".")
然后继续为下一个标记调用strtok(NULL, ".")
当返回的值为null( \0 )时,它是字符串的结尾。

请参阅http://www.cplusplus.com/reference/clibrary/cstring/strtok/

基本上你只需要用NULL指针再次调用strtok。 所以:

 filename = strtok(argv[1], "."); fileext = strtok(NULL, "."); 

再次调用strtok传入NULL作为参数:

 extension=strtok(NULL,".") 

第一次调用strtok应该指向你想要标记的字符串。 之后的所有调用都应该有NULL作为第一个参数, strtok将返回tokens,直到它处理了第一次调用期间传入的整个字符串为止

文件名可以包含多个“。”:例如foo.bar.buz 。 使用您的代码,您将获得foobar.buz而不是foo.barbuz 。 正确的方法是使用这样的东西:

 char *filename = argv[1]; char *ext = strrchr(argv[1], '.'); if (ext) { *ext = '\0'; ext++; }