c - 如何获取C中对象中所有字符串的长度

标签 c string typedef

我有一个结构,其中包含 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/

相关文章:

c - 用于嵌入式系统的轻量级 Web 身份验证

java - 用正则表达式分割许多单个字符(java)

c++ - 将 typedef 移动到函数模板参数时编译错误

c - 错误: argument of type "HNode *" is incompatible with parameter type "HNode *"

java - FFMPEG 和 JNI - 将 AVFrame 数据传递给 Java 并返回

c - bmp 24 位文件格式上的蓝色 channel

c - 更新字符串直到在 C 中找到句点

language-agnostic - 如何从字符串创建一个 SEO 友好的破折号分隔的 url?

python - 获取 ['76 125 94 95 122 96 126 123 124 87' 中的最高数字]?

c - typedef 枚举 : Different values for one member