我有两个字符串可能会独立更改。我想让它们#defines
,所以我不必在代码中改变它。我在将问题与sprintf()
放在一起时遇到了问题。
所以,下面,如果VoltageSet是2.2,我想把字符串“sour:volt:2.2 \ r \ n”放入cmd缓冲区。
(FYI-SOUR:VOLT:2.2是对乐器的SCPI命令,\ r \ n是回车以终止消息)
在我的标题中:
#define SETVOLTAGELEVEL "SOUR:VOLT:"
#define TERMINATIONCHAR "\r"
在我的c代码中:
int SetVoltageLevel (double VoltageSet)
{
char cmd[255]={0};
sprintf(cmd, "SETVOLTAGELEVEL%fTERMINATIONCHAR", VoltageSet);
}
我在想这个吗?有没有更简单的方法?
答案 0 :(得分:2)
sprintf(cmd, SETVOLTAGELEVEL "%f" TERMINATIONCHAR, VoltageSet);
或
sprintf(cmd, "%s%f%s", SETVOLTAGELEVEL, VoltageSet, TERMINATIONCHAR);
答案 1 :(得分:1)
我不太了解你希望通过这种行为(An XY problem?)实现这一目标,但你可以通过一个接一个地编写字符串文字来连接它们:
sprintf(cmd, SETVOLTAGELEVEL "%f" TERMINATIONCHAR, VoltageSet);
<强>可是... 强>
<强> 为什么? 强>
风险很大。您不仅无法使用snprintf()
而不是sprintf()
,但如果两个宏定义的格式说明符多于或少于实际为函数提供参数,则可能会遇到格式字符串错误。
答案 2 :(得分:0)
这里没有错。在编译之前,预处理器即define将被其值替换。所以你不会看到任何不同。
答案 3 :(得分:0)
@BLUEPIXY指出了一种方法。这是一个更接近你的想法。请注意,您所拥有的内容不起作用,因为预处理器不会在字符串内扩展标记。但是你可以使用字符串连接。很高兴知道。
int SetVoltageLevel (double VoltageSet)
{
char cmd[255]={0};
sprintf(cmd, SETVOLTAGELEVEL "%f" TERMINATIONCHAR, VoltageSet);
}