【发布时间】:2009-08-27 16:27:29
【问题描述】:
我正在用 C 语言创建一个函数来将索引值转换为字符串,这是对索引所代表的“字段”的详细描述。
所以,我有一个很好的数组,其中包含索引的所有详细描述,以及索引。
要将其转储到缓冲区中,我使用这样的代码
#define BUFFER_SIZE 40
void format_verbose(uint32_t my_index,
char my_buffer[BUFFER_SIZE])
{
snprintf(mY_buffer, BUFFER_SIZE, "%s", MY_ARRAY[my_index].description);
}
问题出现在某些情况下,我需要在格式化字符串时将一些其他字符串插入到字符串中。所以我想要的是这样的(在这种情况下,描述包含%s)。
void format_verbose_with_data(uint32_t my_index,
char my_buffer[BUFFER_SIZE])
{
// ...
snprintf(mY_buffer, BUFFER_SIZE, MY_ARRAY[my_index].description,
some_string);
}
我们的 make 文件设置为使 snprintf() 的这种(危险)使用警告,并且警告被视为错误。所以,它不会编译。我想关闭这一行的警告,虽然它有点危险,但我会控制字符串,并且我可以测试以确保它适用于调用它的每个值。
或者,我很乐意以其他方式执行此操作,但我真的不热衷于使用此解决方案
void format_verbose_with_data(uint32_t my_index,
char my_buffer[BUFFER_SIZE])
{
// ...
snprintf(mY_buffer, BUFFER_SIZE, "%s%s%s"
MY_ARRAY[my_index].description1, some_string,
MY_ARRAY[my_index].description2);
}
因为它使我的描述数组变得丑陋,尤其是对于那些我不需要添加额外值的数组。
【问题讨论】: