我有一个结构,其中包含 7 个不同的字符串。我需要找到对象中这些字符串的总长度。这是我的类型:
typedef struct
{
char activity [250];
char adv_MAC [250];
char PTx [250];
char refRSSI [250];
char RSSI [250];
char tick [250];
char locatorID [250];
} report_data_t; /**< BLE temporary report data struct */
我不是在寻找对象的大小。我正在寻找对象中每个字符串的长度。我已经尝试过使用
strlen(o1.activity);
但我的目的是以最短的方式实现这一点。
最佳答案
像往常一样,不清楚“短”的含义:您是追求紧凑的代码,还是高性能?
由于有很多结构可供利用,我可能会采用数据驱动的方法:
size_t report_strlen(const report_data_t *r)
{
static const size_t strs[] = {
offsetof(report_data_t, activity), offsetof(report_data_t, adv_MAC),
offsetof(report_data_t, PTx), offsetof(report_data_t, refRSSI),
offsetof(report_data_t, RSSI), offsetof(report_data_t, tick),
offsetof(report_data_t, locatorID),
};
size_t len = 0;
for (int i = 0; i < sizeof strs / siezof *strs; ++i)
{
len += strlen((const char *) r + strs[i]);
}
return len;
}
再想一想,这可能不值得,我只是将所有对 strlen()
的显式调用堆叠起来,这样更容易理解,而且 7 还不够多,不足以保证上述效果。
关于c - 如何获取C中对象中所有字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56734892/