2012-07-15 4 views
0

필자가 작성한 프로그램에 문제가 있습니다. Torrent 파일에서 사용되는 bencode를 구문 분석하는 명령 행 파서입니다. 이 프로그램은 파일 이름을 명령 행으로 사용합니다. 디버깅 Commmand Line 인수 설정을 사용하여 Microsoft Visual Studio 10.0에서 프로그램을 빌드하고 실행할 때 명령 줄 입력으로 프로그램에서 파싱에 실패했음을 알립니다.Visual Studio를 통해 프로그램을 실행하면 프로그램이 실패합니까?

명령 프롬프트를 열고 동일한 명령 줄을 사용하여 명령 프롬프트에서 프로그램을 실행하면 프로그램이 완벽하게 작동합니다! 무슨 일이야? 이 문제가 Visual Studio의 일반적인 문제입니까?

Visual Studio에서 디버거를 사용하여 프로그램이 실패한 위치를 추적하고 파일 길이를 가져 오는 stat 함수 (http://msdn.microsoft.com/en-us/library/14h5k7ff.aspx) 호출이 Visual Studio에서 오류를 반환하지만 외부에서 실행하면 제대로 작동하는 것처럼 보입니다. Visual Studio.

강령은 여기에서 찾을 수있는 Bencode 파서 사용 http://funzix.git.sourceforge.net/git/gitweb.cgi?p=funzix/funzix;a=blob;f=bencode/bencode.c

을 그리고 여기에 프로그램의 코드입니다 : 당신이 Visual에서 상대 경로를 통과하면

#include <stdio.h> 
#include "../Parse/bencode.h" 

int main(int argc, char *argv[]){ 
if(argc != 2){ 
    printf("Usage: whirlwind filename\n"); 
    return 1; 
} 

char *buf; 
long long len; 
be_node *n; 

//read the torrent file into a buffer and store at &buf 
buf = read_file(argv[1], &len); 
if(!buf){ 
    buf = argv[1]; 
    len = strlen(argv[1]); 
} 

printf("Decoding: %s\n", argv[1]); 
n = be_decoden(buf, len); 

if(!n){ 
    printf("Parsing failed!\n"); 
    return 1; 
} 

if(n->type != BE_DICT){ 
    printf("This file is not a valid Bencoded Dictionary.\n"); 
    return 1; 
} 

int i; 
char* keyName; 

for(i = 0; i < 10; i++){ 
    keyName = n->val.d[i].key; 
    if(keyName == "announce"){ 
     printf("\n\n"); 
    } 
    printf("%s\n", keyName); 
    if(keyName == "announce"){ 
     printf("\n\n"); 
    } 
} 

return 0; 

}

+3

코드를 표시하면 누군가가 문제를 발견하는 데 도움이 될 수 있습니다. – Steve

+0

코드가 추가되었습니다. 죄송합니다 : ( – brnby

+1

args 또는 그냥 상대 경로 전체 파일 이름을 전달합니까? 현재 디렉터리를 실행할 때 현재 디렉터리 다를 수 있습니다 (bin/debug, bin/release) – Steve

답변

1

Studio에서는 앱이 IDE에서 실행될 때 올바르게 해석되는지 확인해야합니다. 이 문제는 디버깅 할 때 현재 디렉토리가 일반적으로 \ bin \ debug이기 때문에 발생합니다.
안전한 경로에 있으려면 전체 경로명을 넣거나 구성 파일에서 파일 위치를 읽으십시오.

관련 문제