首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

如何拼出结构体里面的路径

2013-11-14 
怎么拼出结构体里面的路径typedef struct DataParam{int number//记录参数个数char paramName1[20]char

怎么拼出结构体里面的路径
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都会报错。求教怎么做?
[解决办法]
param1.paramName1
param1.paramName2
............
[解决办法]
sprintf(str,"%s%d",param1.paramName1,i);
[解决办法]
这是编译期就确定的东西   你这样拼接当然不行   你还是老老实实param1.paramName1这样用吧...  


PS:有个变通的方法 你定义个指针char *p = param1.paramName1 因为你里面字串长度都是一样的
你就可以一个for里面p = p+ (i*20)这样跳过paramNumber都是取paramName字段...
[解决办法]
data_param  param[100];

int i;
char str[20] = {0};

for(i=0;i<100;i++)
{
    sprintf(str,"%s%d",param[i].paramName1,i); 
}
[解决办法]

引用:
Quote: 引用:

这是编译期就确定的东西   你这样拼接当然不行   你还是老老实实param1.paramName1这样用吧...  


PS:有个变通的方法 你定义个指针char *p = param1.paramName1 因为你里面字串长度都是一样的
你就可以一个for里面p = p+ (i*20)这样跳过paramNumber都是取paramName字段...


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


只要每个paramNumber一样大(也就是paramName之间的间隔一样大)就行啊   而且你那种拼接是不可能编译的过的...
[解决办法]
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);
[解决办法]
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); 
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

这是编译期就确定的东西   你这样拼接当然不行   你还是老老实实param1.paramName1这样用吧...  


PS:有个变通的方法 你定义个指针char *p = param1.paramName1 因为你里面字串长度都是一样的
你就可以一个for里面p = p+ (i*20)这样跳过paramNumber都是取paramName字段...


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


只要每个paramNumber一样大(也就是paramName之间的间隔一样大)就行啊   而且你那种拼接是不可能编译的过的...


就是参数名称和参数值,都是客户端用户定义的,大小是控制不了的


那你死心吧  只有老老实实一个个取...
[解决办法]
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);
[解决办法]
是啊   用 CStringArray  吧!

[解决办法]
变长数组  就能实现你想要的, 因为你的数据结构有"定长"这个特性, 所以变长数组完全可以了.

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;

热点排行