2012-07-15 80 views
0

我遇到了一個我正在編寫的程序的問題。這是一個命令行解析器,用於解析bencode(在torrent文件中使用)。該程序接受一個文件名,因爲它的命令行。當我使用調試命令行參數設置在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

這裏是爲程序代碼:

#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 2012-07-15 13:11:50

+0

添加了代碼。對不起:( – brnby 2012-07-15 13:23:52

+1

)你傳遞完整的文件名的參數或只是一個相對路徑?我問,因爲當在VS內運行當前目錄可能是不同的(斌/調試,斌/釋放) – Steve 2012-07-15 13:29:28

回答

1

如果傳遞從Visual相對路徑Studio應該確保它在IDE中運行時正確解析。出現此問題是因爲在調試時當前目錄通常是\ bin \ debug。
爲了安全起見,請輸入完整路徑名或從配置文件中讀取文件的位置。

相關問題