提取文件的扩展名

时间:2012-01-20 02:00:26

标签: c file strtok

一些细节

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

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

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

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

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

由于

4 个答案:

答案 0 :(得分:2)

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

在上面的代码之后。

首先,使用指向strtok()的指针str来呼叫strtok(str, ".") 然后继续致电strtok(NULL, ".")寻找下一个令牌 当返回的值为null(\0)时,它就是字符串的结尾。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

extension=strtok(NULL,".")

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

答案 3 :(得分:0)

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

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