为什么这些代码会在某个时候崩溃?

时间:2011-05-13 00:54:55

标签: printf

#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()崩溃 但是,如果我将这些代码复制并粘贴到一个简单的项目中,它就能很好地运行......

1 个答案:

答案 0 :(得分:2)

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