让我们考虑以下代码:
int len = 100;
char *buf = (char*)malloc(sizeof(char)*len);
printf("Appended: %s\n",struct_to_string(some_struct,buf,len));
有人分配了大量内存以使其填充字符串数据。问题是从some_struct获取的字符串数据可能是任何长度。所以我想要实现的是使struct_to_string函数执行以下操作:
在struct_to_string中我想做类似的事情:
char* struct_to_string(const struct type* some_struct, char* buf, int len) {
//it will be more like pseudo code to show the idea :)
char var1_name[] = "int l1";
buf += var1_name + " = " + some_struct->l1;
//when l1 is a int or some non char, I need to cast it
char var2_name[] = "bool t1";
buf += var2_name + " = " + some_struct->t1;
// buf+= (I mean appending function) should check if there is a place in a buf,
//if there is not it should fill buf with
//as many characters as possible (without writting to memory) and stop
//etc.
return buf;
}
输出应该是:
Appended: int l1 = 10 bool t1 = 20 //if there was good amount of memory allocated or
ex: Appended: int l1 = 10 bo //if there was not enough memory allocated
总结一下:
我可以问的另一件事,但现在不是那么重要:
我通常不使用C,但现在我有义务这样做,所以我有非常基本的知识。 (对不起我的英文)
编辑:
解决该问题的好方法如下所示:stackoverflow.com/a/2674354/2630520
答案 0 :(得分:0)
我说你需要的只是string.h标题中定义的标准strncat
函数。
关于'迭代结构变量列表' 部分,我不完全确定你的意思。如果你谈论迭代结构的成员,一个简短的答案是:你不能免费反省C结构。
您需要事先知道您正在使用的结构类型,以便编译器知道内存中的 offset ,它可以找到结构的每个成员。否则,它只是一个像其他任何字节一样的字节数组。
不要在意我是否不够清楚,或者是否需要更多细节。 祝你好运。
答案 1 :(得分:0)
所以我基本上就像这样做了:stackoverflow.com/a/2674354/2630520
int struct_to_string(const struct struct_type* struct_var, char* buf, const int len)
{
unsigned int length = 0;
unsigned int i;
length += snprintf(buf+length, len-length, "v0[%d]", struct_var->v0);
length += other_struct_to_string(struct_var->sub, buf+length, len-length);
length += snprintf(buf+length, len-length, "v2[%d]", struct_var->v2);
length += snprintf(buf+length, len-length, "v3[%d]", struct_var->v3);
....
return length;
}
snprintf
尽可能多地写入并丢弃剩下的所有内容,这正是我所寻找的。 p>