【问题标题】:Creating a new file with a different extention [closed]创建具有不同扩展名的新文件[关闭]
【发布时间】:2013-12-16 10:52:55
【问题描述】:

在我的项目中,我有一个文件作为输入,我需要具有新扩展名的输出文件。假设我的输入文件是file.txt,这里是name。我需要输出文件为file.dic。我尝试了以下方法。

fpout = fopen(strcat(name,".dic"), WRITE_ONLY);

我知道这不是正确的方法。但是我应该怎么做才能将文件名设为file.dic

【问题讨论】:

  • 你的括号不平衡。
  • “显然”,您必须将 'txt' 替换为 'dic'。这只是标准字符串的东西,那有什么问题呢?
  • "file.txt"".dic" 连接时您还能期待什么?

标签: c string file


【解决方案1】:
 char * newstr;
  newstr = strstr (name,"txt");// name = "file.txt"
  strncpy (newstr,"dic",3);
  //newstr = file.dic 

这会将file.txt 替换为file.dic

【讨论】:

    【解决方案2】:

    如果您只想更改文件扩展名,这是一种简单的方法。

    int lenght; 
    
    lenght = strlen(name);
    
    name[lenght - 1] = c;
    name[lenght - 2] = i;
    name[lenght - 3] = d;
    name[lenght - 4] = .;
    

    你也可以使用while,虽然你不勾选'.'增加 i,然后以相同的方式更改扩展名。

      strncpy (strstr (name,"txt"),"dic",3);
    

    【讨论】:

    • 这可能不起作用,原因有两个。首先,名称可以在 OP 代码的只读部分中(当声明为立即数时)。其次,您的代码将从 C 字符串中删除终止零,这通常是致命的。
    • 它不会删除终止的零。我认为 Strlen 不要给出长度 + 1,不是吗?
    • 数组索引从 0 开始。在 C 和 C++ 中,访问 array[sizeOfArray] 是越界的。如果是字符串,string[lengthOfString] 指的是终止符。如果输入文件名突然具有不同的扩展名,或者根本没有扩展名,代码也可能会产生意外结果。
    • 是的,但是他问了这个例子,我不认为他是专业的程序员,他只是问了一些他不知道并且他想了解的东西。我知道 gice 代码不是一件好事,但我认为在这种情况下这是要做的事情。
    猜你喜欢
    • 2015-05-31
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    相关资源
    最近更新 更多