【发布时间】:2015-02-11 08:46:03
【问题描述】:
我正在开发一种需要非常快的启动时间的行业安全产品。我正在尝试遵循输出 ASCII 文件的行业标准。为了加快这个文件格式化步骤,我使用#define's 在静态内存中创建了几个字符数组。下面是一小部分的例子:
#define COMTRADE_STATION_ID "Station Name,Device ID,1999\r\n"
#define COMTRADE_CHANNEL_COUNT "10,10A,0D\r\n"
#define COMTRADE_FREQUENCY "60\r\n"
#define COMTRADE_FILE_TYPE "BINARY\r\n1\r\n"
struct TS_ComtradeConfig
{
const char StationID[sizeof(COMTRADE_STATION_ID)];
const char ChannelCount[sizeof(COMTRADE_CHANNEL_COUNT)];
char Frequency[sizeof(COMTRADE_FREQUENCY)];
const char FileType[sizeof(COMTRADE_FILE_TYPE)];
};
TS_ComtradeConfig ConfigFile =
{
{COMTRADE_STATION_ID},
{COMTRADE_CHANNEL_COUNT},
{COMTRADE_FREQUENCY},
{COMTRADE_FILE_TYPE}
};
这是我用来打印它的一些基本代码。
for(int nIndex = 0; nIndex < sizeof(ConfigFile); nIndex++)
{
printf("%c", ((char*)(ConfigFile.StationID))[nIndex]);
}
这可以很好地生成静态字符数组,并且可以很好地打印整个 ConfigFile 作为一个整体,但是字符数组是以空结尾的,这意味着最终结果不符合行业标准。似乎#define 字符串被预处理器以空值终止。有没有办法解决?或者有其他方法可以进行这种高速操作吗?
【问题讨论】:
-
你试过了吗:const char StationID[sizeof(COMTRADE_STATION_ID)-1];
-
@Rob 请不要建议人们溢出缓冲区。其他所有人,请不要赞成 cmets 建议人们溢出缓冲区。
-
@Rob:是啊,溢出数组很有趣
-
“似乎#define 字符串被预处理器以空值结尾” 是的,字符串文字是以空值结尾的。不过,它与
#define并没有太大关系…… -
这个问题不清楚。输出是问题,还是结构的布局/内容?你还会用它做什么?您试图遵守哪个“行业标准”?
标签: c++