gpt4 book ai didi

c - 可变长度数组折叠为常量数组

转载 作者:太空狗 更新时间:2023-10-29 14:53:21 28 4
gpt4 key购买 nike

const int buf_length = 255;
char buf[ buf_length + 1 ];

snprintf(buf, buf_length, "%d Next on [%s] %s:", channel, station_channel(channel), station_name(channel));

strncat(buf, "(", buf_length - strlen (buf));
strncat(buf, station_country( xmltv ), buf_length - strlen(buf));
strncat(buf, ")", buf_length - strlen (buf));

country_list_set_text( buf );

这得到警告:

variable length array folded to constant array as an extension.

你能帮忙解决这个问题吗?

最佳答案

在 C 中,const int 变量是一个变量(恰好是 const 限定的),而不是在边界中使用时所需的整数常量全局和静态数组,或者在 switch 语句的 case 标签中。参见 static const vs #define in C进行广泛的讨论。我假设您知道什么是 VLA(可变长度数组)——如果不知道,请发表评论,我会添加说明。

有几种解决方法。我通常使用的是 enum:

enum { buf_length = 255 };
char buf[buf_length + 1];

snprintf(buf, sizeof(buf), "%d Next on [%s] %s:",
channel, station_channel(channel), station_name(channel));

请注意,我将 snprintf() 调用中 buf_length 的使用更改为 sizeof(buf);当数组声明在范围内时,这是执行此操作的规范方法 - 并避免浪费您添加到缓冲区的额外字节。

你可以使用#define buf_length 255;这是经典的方法。

我经常使用大写常量 (BUF_LENGTH) 而不是小写来指定常量。它实际上并不重要,但它在 C 中或多或少是常规的(见证 C 标准中的大多数常量,但有一些奇怪的异常(exception),例如 L_tmpnam)。

在 C++ 中,情况有所不同。 const int buf_length = 255; 可用于 switch 语句和数组边界。

关于c - 可变长度数组折叠为常量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18435302/

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