当前位置:  开发笔记 > 编程语言 > 正文

此代码是否删除了文件扩展名?

如何解决《此代码是否删除了文件扩展名?》经验,为你挑选了1个好方法。

这不是我的代码; 我试图找出这究竟是什么.这是用C语言编写的一个古老的大系统的一部分(实际上它是4年前编写的,但很可能是由80年代后期的程序员心态编写的).部分代码:

char DestFile[256];
char DestFile2[256];

//This part is just to show an example
strcpy(DestFile, "/foo/boo/goo.gz")

strcpy ( DestFile2, DestFile );
Ptr = strrchr ( DestFile2, '.' );
if ( Ptr != 0 ) {
   if ( ( strcmp ( Ptr, ".gz" ) == 0 ) ||
        ( strcmp ( Ptr, ".Z" ) == 0 ) ) {
       *Ptr = 0;
       rename ( DestFile, DestFile2 );
    }
}

DestFile2未在函数中的任何其他位置设置.我编译了上面的代码,并打印出DestFile显示没有任何改变.我唯一能想到的就是删除文件扩展名(*Ptr = 0),但我对C的了解非常有限......

有任何想法吗?看起来每次获取带.gz或.z的文件时,它都会将文件重命名为相同的名称.



1> Soraz..:

你是对的.

在C中,字符串是由ASCII代码为0的字符终止的字符数组.

因此,首先,将DestFile复制到DestFile2

然后执行右扫描,找到最右边的'.'.这将返回指向匹配的char的指针,如果未找到匹配则返回null.

所以现在你有了(例子名:myfile.gz)

DestFile2

              |- Ptr
              v    
  M y f i l e . g z \0

然后它比较从Ptr开始的字符串是否匹配.Z或.gz,如果匹配,则将Ptr指向的char的值设置为\ 0,从而有效地截断字符串.

将Ptr设置为\ 0后,您就可以了

M yfile\0 gz\0

请记住,当我们达到\ 0时,c认为字符串已完成,因此最后一次重命名有效地说明了

rename("myfile.gz", "myfile");

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有