필자가 작성한 프로그램에 문제가 있습니다. 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;
}
코드를 표시하면 누군가가 문제를 발견하는 데 도움이 될 수 있습니다. – Steve
코드가 추가되었습니다. 죄송합니다 : ( – brnby
args 또는 그냥 상대 경로 전체 파일 이름을 전달합니까? 현재 디렉터리를 실행할 때 현재 디렉터리 다를 수 있습니다 (bin/debug, bin/release) – Steve