经典指数          
原因
1759
浏览数
0
收藏数
 

下面一段代码,想在调用 f2(1) 时打印 err1,调用 f2(2) 时打印 err4,但是代码中有一些问题,请做尽可能少的修改使之正确。 static int f1( const char *errstr, unsigned int flag ) {   int copy, index, len;   const static char **__err = { "err1", "err2", "err3", "err4" };   if( flag & 0x10000 )     copy = 1;   index = ( flag & 0x300000 ) >> 20;   if( copy ) {     len = flag & 0xF;     errstr = malloc( len );     if( errstr = NULL )       return -1;     strncpy( errstr, __err[index], sizeof( errstr ) );   } else     errstr = __err + index; } void f2( int c ) {   char *err;   swtch( c ) {   case 1:     if( f1( err, 0x110004 ) != -1 )       printf( err );   case 2:     if( f2( err, 0x30000D ) != -1 )       printf( err );   } }

     举报   纠错  
 
切换
1 个答案

程序中存在大量错误,可改为

static int f1(char **errstr, unsigned int flag)

{

    int copy = 0, index, len;

    const static char *__err[4] = {"err1", "err2", "err3", "err4"};

    if(flag & 0x10000)

    copy = 1;

    index = (flag & 0x300000) >> 20;

    if(copy)

    {

        len = flag & 0xF;

        *errstr = (char*)malloc(len * sizeof(char));

        if(*errstr == NULL)

            return -1;

        strncpy(*errstr, __err[index - 1], sizeof(errstr));

    }

    else

    *errstr =  (char*)(*(__err + index));

}

void f2(int c)

{

    char **err = (char**)malloc(sizeof(char*));

    switch(c) //dongguo

    {

        case 1:

        if(f1(err, 0x110004) != -1)

        printf(*err);

        printf("\n");

        break;

        case 2:

        if(f1(err, 0x30000D) != -1)

        printf(*err);

        printf("\n");

        break;

    }

    free(err);

}

 
切换
撰写答案