提取文件的扩展名
一些细节
- 语言: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 。 使用您的代码,您将获得foo和bar.buz而不是foo.bar和buz 。 正确的方法是使用这样的东西:
char *filename = argv[1]; char *ext = strrchr(argv[1], '.'); if (ext) { *ext = '\0'; ext++; }