【问题标题】:Renaming an SRT file in C using command prompt使用命令提示符在 C 中重命名 SRT 文件
【发布时间】:2017-09-09 13:04:11
【问题描述】:

假设我有一个名为 "____.srt" 的文件,其中 ___ 可以是任何东西。 我正在尝试通过添加 '1' 来更改它的名称,所以它看起来像这样“____1.srt”。

使用 CMD argv[1] 从参数中读取文件。

void main(int argc,char* argv[]){   
char* pt; 
pt = strstr(argv[1],".srt\0"); // checks if end of input-string is .srt
    if( pt == NULL)
    {
        fprintf(stdout,"Invalid input.\nInput file must be inputfile.srt\n");
        fprintf(stdout,"Program will now exit\n");
        return; 
    }
    strcpy(pt,'1'); 
    strcat(argv[1],".srt");

    fprintf(stdout,"%s file was created.\n",argv[1]);  }

这似乎不起作用。有人能找出问题所在吗?我会很感激任何帮助。 谢谢

【问题讨论】:

  • 我不太了解c,但是,您不应该在strstr(argv[1],".srt\0")之前检查argc的值吗?
  • 您没有说明“它似乎不起作用”。您正在打印出新的文件名,但实际上并未重命名文件(甚至首先检查它是否存在)。此外,在文字字符串中包含 \0 是没有意义的。
  • @Klitos 我正在检查文件是否存在。我没有提到它,因为它不是重点。如果我不放 \0,我还要如何检查字符串是否以“.srt”结尾?
  • stackoverflow.com/questions/10347689/…。 C 库中没有办法直接匹配字符串的结尾。字符串文字中的“\0”被视为字符串“.srt”的结尾。函数 strstr 不可能区分“.str\0”和“.srt”。
  • 从重命名操作中捕获任何错误代码也是一个不错的策略,例如函数返回代码和 errno。这些代码至少会告诉您呼叫失败的原因。如果您想从 system() 调用中查看错误文本,请改用 popen()。

标签: c file cmd arguments srt


【解决方案1】:

经过几次修改,您的代码看起来像这样,我希望它能正常工作。在您的代码中,您没有正确处理字符串。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc,char* argv[]){
    char* pt;
    int flag;
    pt = strstr(argv[1],".srt\0"); // checks if end of input-string is .srt
    if( pt == NULL)
    {
        fprintf(stdout,"Invalid input.\nInput file must be inputfile.srt\n");
        fprintf(stdout,"Program will now exit\n");
        return 0;
    }

    pt = (char*)malloc(sizeof(argv[1] + 1)); // filename length + number or additional digits
                                             // Needed for using strncpy function
    strncpy(pt, argv[1], strlen(argv[1]) - 4); // copying filename except the .srt extention.
    strcat(pt, "1.srt"); //using pt for new filename
    flag = rename(argv[1], pt);

    if (flag == 0) // rename returns 0 on success
        fprintf(stdout,"New file name: %s\n", pt);
    else
        fprintf(stdout,"An error occurred\n");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    相关资源
    最近更新 更多