2012-07-15 53 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。
为了安全起见,请输入完整路径名或从配置文件中读取文件的位置。

相关问题