typedef struct DataParam
{
int number;   //记录参数个数
char paramName1[20];
char paramNumber1[20]; char paramName2[20];
char paramNumber2[20]; char paramName3[20];
char paramNumber3[20]; char paramName4[20];
char paramNumber4[20]; char paramName5[20];
char paramNumber5[20];
}data_param;定义结构体data_param param1;
怎么通过for语句遍历结构体下面的paramName参数?
下面这样是不行的:
int i = 1;
char str[20] = {0};
sprintf(str,"%s%d","paramName",i);
取得时候param1.(str)、param1.str都会报错。求教怎么做?

解决方案 »

  1.   

    param1.paramName1
    param1.paramName2
    ............
      

  2.   

    sprintf(str,"%s%d",param1.paramName1,i);
      

  3.   

    这是编译期就确定的东西   你这样拼接当然不行   你还是老老实实param1.paramName1这样用吧...  
    PS:有个变通的方法 你定义个指针char *p = param1.paramName1 因为你里面字串长度都是一样的
    你就可以一个for里面p = p+ (i*20)这样跳过paramNumber都是取paramName字段...
      

  4.   

    data_param  param[100];int i;
    char str[20] = {0};for(i=0;i<100;i++)
    {
        sprintf(str,"%s%d",param[i].paramName1,i); 
    }
      

  5.   


    真快
    我是说结构体里面的
    char paramName1[20];
     char paramNumber1[20];
    有100个
      

  6.   


    如果结构体里面的
    char paramName1[20];
      char paramNumber1[20];
    有100个
    定义指针大小不好确定,不好操作文件。
      

  7.   


    如果结构体里面的
    char paramName1[20];
      char paramNumber1[20];
    有100个
    定义指针大小不好确定,不好操作文件。只要每个paramNumber一样大(也就是paramName之间的间隔一样大)就行啊   而且你那种拼接是不可能编译的过的...
      

  8.   


    如果结构体里面的
    char paramName1[20];
      char paramNumber1[20];
    有100个
    定义指针大小不好确定,不好操作文件。只要每个paramNumber一样大(也就是paramName之间的间隔一样大)就行啊   而且你那种拼接是不可能编译的过的...就是参数名称和参数值,都是客户端用户定义的,大小是控制不了的
      

  9.   

    typedef struct DataParam
    {
    int number;   //记录参数个数
    char paramName[100][20];
    char paramNumber[100][20];
    }data_param;data_param param
    sprintf(str,"%s%d",param.paramName[i],i);
      

  10.   

    typedef struct XXX
    {
        char paramName[20];
        char paramNumber[20];
    }MyType;typedef struct DataParam
    {
        int number;   //记录参数个数
        MyType data[100];
    }data_param;data_param param
    sprintf(str,"%s%d",param.data[i].paramName,i); 
      

  11.   


    如果结构体里面的
    char paramName1[20];
      char paramNumber1[20];
    有100个
    定义指针大小不好确定,不好操作文件。只要每个paramNumber一样大(也就是paramName之间的间隔一样大)就行啊   而且你那种拼接是不可能编译的过的...就是参数名称和参数值,都是客户端用户定义的,大小是控制不了的那你死心吧  只有老老实实一个个取...
      

  12.   

    typedef struct DataParam
    {
    int number;   //记录参数个数
    char paramName1[20];
    char paramNumber1[20];char paramName2[20];
    char paramNumber2[20];char paramName3[20];
    char paramNumber3[20];char paramName4[20];
    char paramNumber4[20];char paramName5[20];
    char paramNumber5[20];
    }data_param;int i = 1;
    char str[20] = {0};
    char *p=param1.paramName1;
    for(i=0;i<100;i++)
    sprintf(str,"%s%d",p+i,i);
      

  13.   

    for(i=0;i<100;i++)
    sprintf(str,"%s%d",p+i*40,i); 
      

  14.   

    是啊   用 CStringArray  吧!
      

  15.   

    变长数组  就能实现你想要的, 因为你的数据结构有"定长"这个特性, 所以变长数组完全可以了.typedef struct DataParam
    {  //记录参数个数
    char paramName1[20];
    char paramNumber1[20];
    } tagDataParam;typedef strucgt DataParamArry
    {
        int tagNum;
        tagDataParam dataArry[1];//因为是变长, 这里只申请一个.
    }tagDataParamArry;现在, 如果你想有100 tagDataParam怎么做呢?
    代码如下:tagDataParamArry *pDatas = (tagDataParamArry *)malloc(100*sizeof(tagDataParam)+sizeof(int)); //100个tagDataParam和1个int的空间.然后使用的时候就是这样了.pDatas->tagNum = 100;pDatas->dataArry[i].paramName1 = 0;  //i是数组索引
    pDatas->dataArry[i].paramNumber1 = 0;
      

  16.   

    pDatas->dataArry[i].paramName1 = 0;  //i是数组索引
    pDatas->dataArry[i].paramNumber1 = 0;这里语法有问题, 注意红色部分是字符数组, 我这里用错了, 注意纠正.