2017-04-13 14 views
0

"____.srt"라는 파일이 있다고 가정 해 봅시다. ___는 무엇이든 될 수 있습니다. 이름을 변경하려고하는데 '1'을 추가하면 "____1.srt"와 같이 보입니다.명령 프롬프트를 사용하여 C에서 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]); } 

이것은 작동하지 않습니다. 누군가 문제를 파악할 수 있습니까? 나는 어떤 도움을 주셔서 감사합니다. 감사합니다.

+0

난 당신이하지 않는 strstr (변수는 argv [1], ". SRT \ 0")'하기 전에 argc''의 값을 확인하지 않아야, 너무 많은'c'를 모르겠지만'. – dcg

+0

"어떻게 작동하지 않는지"를 명시하지 마십시오. 새 파일 이름을 인쇄하지만 파일의 이름을 실제로 바꾸지는 않습니다. 또한 리터럴 문자열에'\ 0'을 쓰는 것은 의미가 없습니다. –

+0

@Klitos 파일이 있는지 확인하고 있습니다. 그게 아니라고 나는 언급하지 않았다. \ 0을 넣지 않으면 문자열이 ".srt"로 끝나는 지 어떻게 확인할 수 있습니까? – Jadenkun

답변

0

몇 가지 수정을하면 코드가 다음과 같이 보이며 작동하는 것이 좋습니다. 귀하의 코드에서 문자열을 제대로 처리하지 못했습니다.

#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"); 
}