C如何识别功能是否存在

C如何识别功能是否存在,c,C,我有以下c代码: char tag34[32]={0} ,tag16104[32]={0} ,tag43[16]={0} ,tag37[32]={0} ; char tag35[8]={0} , tag150[8]={0} , tag11[32]={0} , tag41[32]={0}; char tag48[32]={0} , tag207[32]={0} , tag55[32]={0} ; char tag167[32]={0} , tag200[32]={0} , tag44[32]={0

我有以下c代码:

char tag34[32]={0} ,tag16104[32]={0} ,tag43[16]={0} ,tag37[32]={0} ;
char tag35[8]={0} , tag150[8]={0} , tag11[32]={0} , tag41[32]={0};
char tag48[32]={0} , tag207[32]={0} , tag55[32]={0} ;
char tag167[32]={0} , tag200[32]={0} , tag44[32]={0} ;
char tag151[16]={0} , tag32[16]={0} , tag31[16]={0}  ;
char tag379[32]={0},  tag372[16]={0} , tag58[128]={0} ; 
char tag16710[32]={0},tag16724[32]={0} ;

for(int idx=0;idx<inum;idx++){
    if( strlen(ArrLeftVar[idx]) < 1 )
        break ;
    if( strcmp(ArrLeftVar[idx],"34") == 0 ){ 
        strncpy( tag34,ArrRightVal[idx],sizeof(tag34) - 1 ) ;
    }else if( strcmp(ArrLeftVar[idx],"150") == 0 ){ 
        strncpy( tag150,ArrRightVal[idx],sizeof(tag150) - 1 ) ;
    }else if( strcmp(ArrLeftVar[idx],"11") == 0 ){  
        strncpy( tag11,ArrRightVal[idx],sizeof(tag11) - 1 ) ;
    }else if( strcmp(ArrLeftVar[idx],"41") == 0 ){  
        strncpy( tag41,ArrRightVal[idx],sizeof(tag41) - 1 ) ;
    }else if( strcmp(ArrLeftVar[idx],"43") == 0 ){   
        strncpy( tag43,ArrRightVal[idx],sizeof(tag43) - 1 ) ;
    }else if( strcmp(ArrLeftVar[idx],"48") == 0 ){  
        strncpy( tag48,ArrRightVal[idx],sizeof(tag48) - 1 ) ;
    }else if( strcmp(ArrLeftVar[idx],"207") == 0 ){  
        strncpy( tag207,ArrRightVal[idx],sizeof(tag207) - 1 ) ;
    }else if( strcmp(ArrLeftVar[idx],"55") == 0 ){   
        strncpy( tag55,ArrRightVal[idx],sizeof(tag55) - 1 ) ;
    }else if( strcmp(ArrLeftVar[idx],"167") == 0 ){  
        strncpy( tag167,ArrRightVal[idx],sizeof(tag167) - 1 ) ;
    }else if( strcmp(ArrLeftVar[idx],"200") == 0 ){ 
        strncpy( tag200,ArrRightVal[idx],sizeof(tag200) - 1 ) ;
    }else if( strcmp(ArrLeftVar[idx],"44") == 0 ){   
        strncpy( tag44,ArrRightVal[idx],sizeof(tag44) - 1 ) ;
    } .......
    ......
}//for 
char tag34[32]={0},tag16104[32]={0},tag43[16]={0},tag37[32]={0};
char tag35[8]={0},tag150[8]={0},tag11[32]={0},tag41[32]={0};
char tag48[32]={0},tag207[32]={0},tag55[32]={0};
char tag167[32]={0},tag200[32]={0},tag44[32]={0};
char tag151[16]={0},tag32[16]={0},tag31[16]={0};
char tag379[32]={0},tag372[16]={0},tag58[128]={0};
char tag16710[32]={0},tag16724[32]={0};

对于(int idx=0;idx,可以定义如下结构:

struct tags {
    const char *name;
    int maxlen;
    char value[128];
};

struct tags tagList[] = {
    { "34", 32, 0 },
    { "43", 16, 0 },
    { "11", 32, 0 },
    ...
};
for(int idx=0;idx<inum;idx++){
    if( strlen(ArrLeftVar[idx]) < 1 )
        break ;
    for (int tagIdx=0; tagIdx < (sizeof(tagList) / sizeof(tagList[0]); tagIdx++) {
        if( strcmp(ArrLeftVar[idx],tagList[tagIdx].name) == 0 ){ 
            strncpy(tagList[tagIdx].value,
                    ArrRightVal[idx],
                    tagList[tagIdx].maxlen - 1 );
            tagList[tagIdx].value[tagList[tagIdx].maxlen - 1] = '\0';
            break;
        }
    }
}
然后您可以这样编写循环:

struct tags {
    const char *name;
    int maxlen;
    char value[128];
};

struct tags tagList[] = {
    { "34", 32, 0 },
    { "43", 16, 0 },
    { "11", 32, 0 },
    ...
};
for(int idx=0;idx<inum;idx++){
    if( strlen(ArrLeftVar[idx]) < 1 )
        break ;
    for (int tagIdx=0; tagIdx < (sizeof(tagList) / sizeof(tagList[0]); tagIdx++) {
        if( strcmp(ArrLeftVar[idx],tagList[tagIdx].name) == 0 ){ 
            strncpy(tagList[tagIdx].value,
                    ArrRightVal[idx],
                    tagList[tagIdx].maxlen - 1 );
            tagList[tagIdx].value[tagList[tagIdx].maxlen - 1] = '\0';
            break;
        }
    }
}

for(int idx=0;idxd)在阅读并完全理解strncpy的功能之前,不要使用它。然后不要使用它。它不是“安全的”“代码< >代码>”/c> >。正如你已经注意到的,没有语言C/C++。但是不同的语言C和C++。选择一个并坚持它。我们说,我们没有编码或辅导服务。没有这样的语言叫做“C/C++”。我闻到了一个强大的HOUT痛风。太远了,奥拉夫。我想我们可能已经发展成Y-Z。