怎么拼出结构体里面的路径
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);
}
[解决办法]
只要每个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);
[解决办法]
这是编译期就确定的东西 你这样拼接当然不行 你还是老老实实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;