gpt4 book ai didi

c - 编译时最大?

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:54 24 4
gpt4 key购买 nike

static const char * a = "0,0,0,%d,0,0,0,0,0,0,0,0,0,0";
static const char * b = "0,%d,0,0,0,0,0,0,%d,0,0,0";

void function(void)
{
const uint16_t bufferSize = MAX(sizeof(a),sizeof(b));
char bufferData[bufferSize+1];
}

我现在这个代码是无效的,但它是为了这个想法。

目标是定义一个足够大的数组来容纳 a 和 b 之间的最大常量字符串。

  • 由于 sizeof 是在编译时评估的,所有信息都可用于在运行时评估大小。有任何已知的解决方案吗?
  • 如果是,如何将其扩展为 n 个字符串而不是两个?

最佳答案

如果您没有锁定字符串的类型,只是知道它们是常量字符串,您可以将它们作为 char[] 类型来实现:

#define SIZE(Z) (sizeof(Z)/sizeof(char))
#define MAX(X,Y) SIZE(X) > SIZE(Y) ? SIZE(X) : SIZE(Y)

int main()
{
char a[] = "asdfasdfasdfasdfasdfasdf"; // length: 24
char b[] = "adsfasdfasdfasdfasdfa"; // length: 21

char buffer[MAX(a, b) + 1];

printf("buffer size: %d\n", MAX(a, b) + 1); // returns 25

return 0;
}

关于c - 编译时最大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50878646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com