URI Decoding 도저히 모르겠습니다

  • 샹아바
    샹아바
    #include <stdio.h>
    #include <string.h>
    
    int main() {
         int C;
         char input[81]={0};
         char *tmp;
    
         scanf("%d",&C);
         while(C--){ 
              scanf("%s",input);
              tmp=(input)-1;
              while( tmp=strstr(tmp+1,"%2")) {
                   if ( *(tmp+2) == '0') *tmp=' ';
                   else if ( *(tmp+2) == '1') *tmp='!';
                   else if ( *(tmp+2) == '4') *tmp='$';
                   else if ( *(tmp+2) == '5') *tmp='%';
                   else if ( *(tmp+2) == '8') *tmp='(';
                   else if ( *(tmp+2) == '9') *tmp=')';
                   else if ( *(tmp+2) == 'a') *tmp='*';
                   else continue;
    
                   if( tmp<=&input[78]) strcpy(tmp+1,tmp+3);
              }
              printf("%s\n",input);
         }
         return 0;
    }
    

    코드 전문입니다

    input
    5
    Happy%20Joy%20Joy%21
    http://algospot.com/%2a
    %2525
    %25%25
    %2520

    output
    Happy Joy Joy!
    http://algospot.com/*
    %25
    %%
    %20

    이렇게 나오는데 어느부분이 잘못됬는지를 모르겠는데
    지적좀 부탁드립니다


    9년 전
2개의 댓글이 있습니다.
  • JongMan
    JongMan

    http://linux.die.net/man/3/strcpy 에 보시면, The strings may not overlap이라고 되어 있습니다.


    9년 전 link
  • 샹아바
    샹아바

    와... 해결했습니다
    결과창만 봤을땐 이상없어서 저런게 안되는지는 생각도 안해봤었네요
    감사합니다


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.