这段代码会删除文件扩展名吗?

2024-01-30

这不是我的代码;我想弄清楚这到底是做什么的。这是一个用 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 的文件时,都会将该文件重命名为相同的名称。


你是对的。

在 C 中,字符串是一个以 ASCII 代码 0 的字符结尾的字符数组。

所以,首先,DestFile被复制到DestFile2

然后执行从右侧的扫描,以找到最右侧出现的“.”。 这将返回一个指向匹配的字符的指针,如果未找到匹配的字符,则返回 null。

现在你有了(示例名称:myfile.gz)

目标文件2

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

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

将 Ptr 设置为 \0 后,您现在拥有

我的文件 \0 g z \0

请记住,当我们到达 \0 时,c 认为字符串已完成,因此最后的重命名实际上表示

rename("myfile.gz", "myfile");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这段代码会删除文件扩展名吗? 的相关文章

随机推荐

  • android:smoothScrollToPosition()无法正常工作

    在将元素添加到与列表视图关联的数组适配器后 我试图平滑地滚动到列表的最后一个元素 问题是它只是滚动到随机位置 arrayadapter add item DOES NOT WORK CORRECTLY listview smoothScro
  • 如何在tensorflow keras中使用CRF?

    代码是这样的 import tensorflow as tf from keras contrib layers import CRF from tensorflow import keras def create model max se
  • 在Python中从url下载csv.gz文件

    我在从网址下载 csv gz 文件时遇到问题 我在下载 tar gz 文件时没有问题 对于 csv gz 文件 我可以提取 gz 文件并读取我的 csv 文件 如果我可以使用 URL 而不是事先拥有 csv 1 0 csv gz 那就很方便
  • 为 UIBarButtonItem 设置图像 - 图像拉伸

    当我尝试使用 UIBarButtonItem 的 initWithImage 来初始化导航栏自定义图像时 它会被冲破并拉伸到黑色导航栏上 这就是我创建它的方式 UIBarButtonItem button UIBarButtonItem a
  • 警告:为 foreach() 提供的参数无效

    results mysql query select from classpics foreach results as uno echo td valign middle align center a class neutral href
  • Linux中使用的offsetof

    我正在研究如何在给定结构中找到特定变量的偏移量 我尝试了以下程序 struct info char a int b char c int d struct info myinfo int main int argc char argv st
  • 缓存URL内容

    我有一个非常简单的用例 当远程端的内容发生变化时 例如 当 上次修改 发生变化时 通过正确和自动重新加载来缓存 URL 的内容 我怎样才能在Java中做到这一点 注意 我的类路径上有 spring guava 和 commons lang3
  • 从 ABC 和 django.db.models.Model 继承会引发元类异常

    我正在尝试使用Python 3实现一个Django数据模型类 它也是一个接口类 我这样做的原因是 我正在为我的同事编写一个基类 并且需要他全部实现三个方法他从我的课程中派生出来的 我试图为他提供一种简化的方式来使用我设计的系统的功能 但是
  • 如何让Python Yaml库以人性化的方式保存?

    这是我得到的 Python 代码 d ToGoFirst aaa Second bbb Pagargaph Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eius
  • 每次抽奖都重画不变的背景?

    这可能是一个非常简单的问题 但我搜索后发现没有其他方法可以做到这一点 每次绘制时都重新绘制背景是没有意义的 有没有办法画一些东西并将它们留在屏幕上 我试图注释掉 GraphicsDevice Clear Color CornflowerBl
  • 从另一个应用程序窗口获取焦点控件的句柄

    我有一个应用程序有一些控件 按钮 编辑等 的窗口 我需要模拟用户事件 如 Tab 单击和输入文本 我在用着keybd event在 Tab 键顺序控件 编辑框 之间移动焦点并为其输入文本 但我需要知道当前焦点控件的句柄 例如从中获取文本或更
  • 使用 ASP.NET Web API 并行进行基本身份验证和表单身份验证

    免责声明 首先我要说的是 我是 MVC4 Web Api 一般 Web 服务 JQuery 的新手 我可能从错误的角度攻击这个问题 我正在尝试用 C 为 NET 4 构建一个 Web MVC 应用程序 Web API 以部署在 Azure
  • async_resolve 中的 boost::asio::ip::tcp::resolver::iterator 的生命周期是多少?

    当我打电话时boost asio ip tcp resolver async resolve 我的处理程序收到一个ip tcp resolver iterator迭代一个或多个ip tcp resolver entries 他们的寿命是多少
  • 位列的唯一约束仅允许 1 个真 (1) 值

    我有这张表 CREATE TABLE tblExample ExampleID int IDENTITY 1 1 NOT NULL WordsAndStuff nvarchar max NOT NULL Active bit NOT NUL
  • 如何使 Django sessionId cookie 安全

    这是我目前的sessionIdcookie属性 设置 Cookie sessionid 3jdpjxgepk49vrnhbabdvju3r80ci581 过期 2018 年 8 月 6 日星期一 12 40 14 GMT 仅 Http 最大
  • 通过显示文本查找带有selenium的元素

    我试图将鼠标悬停在带有硒的菜单栏中的元素上 但很难找到该元素 该元素显示如下 div class mainItem TextToFind div 这种类型有多个元素 因此我需要通过以下方式找到该元素TextToFind 我试过了 drive
  • Bootstrap 4:带有徽标和 2 行的导航栏

    我正在尝试使用 Bootstrap 4 创建一个符合下面原理图的网站标题 我用来实现此目的的代码如下 省略了无关代码 div class navbar div class container yellow div class row div
  • 尝试将 Braintree-Web 集成到 Angular2 中

    我正在尝试在我的 Angular2 应用程序中使用 Braintree SDK braintree web 我真的很感激任何有关如何使其发挥作用的指示 我认为这是因为我没有导入 Braintree web 模块 但我也不知道如何导入 我可以
  • 如何删除 HTML 中字符之间的空格?填充不起作用

    即使我将填充添加为 0px 为什么字母 之前有空格 以红色标记 span style margin 0 padding 0 border 1px solid blue font size 48px span That space is pa
  • 这段代码会删除文件扩展名吗?

    这不是我的代码 我想弄清楚这到底是做什么的 这是一个用 C 语言编写的大型古老系统的一部分 实际上它是 4 年前编写的 但很可能是由 80 年代末程序员心态编写的 部分代码 char DestFile 256 char DestFile2