2011-05-13 99 views
1
#define MAX_LENGTH_STRING 4096 
void BugCode() 
{ 
    char szLine[MAX_LENGTH_STRING] = {0}; 
    char szSelection[MAX_LENGTH_STRING] = {0}; 
    va_list my_args; 

    szSelection[0]= 0xe7 ; 
    szSelection[1]= 0xac ; 
    szSelection[2]= 0xac ; 
    szSelection[3]= 0xe4 ; 
    szSelection[4]= 0xb8 ; 
    szSelection[5]= 0x80 ; 
    szSelection[6]= 0xe5 ; 
    szSelection[7]= 0x8d ; 
    szSelection[8]= 0x95 ; 
    szSelection[9]= 0x00 ; 


    va_start(my_args, szSelection); 

#ifdef WIN32 
    _vsnprintf(szLine, MAX_LENGTH_STRING-1, szSelection, my_args); 
#else 
    vsnprintf(szLine, MAX_LENGTH_STRING - 1, szSelection, my_args); 
#endif 
} 

的BugCode()将崩溃在_vsnprintf() 但是,如果我复制&这些代码粘贴到一个简单的项目,它工作得很好......为什么这些代码会在某个时候崩溃?

回答

2

您没有使用正确va_startva_start(和va_list)只能用于variadic function arguments。将它们用于任何其他目的是未定义的行为。

相关问题