【发布时间】:2014-05-24 06:33:27
【问题描述】:
我正在为一些温度感应编写 PIC。最终输出通过 UART 发送到 PC。温度传感器 ID 的 MSB 用于确定传感器的位置。
我刚刚添加了我正在使用的代码的有罪部分(没有必要让你对其余部分感到厌烦)。问题在于我正在使用的 location[] char。我已经尝试了几种方法(*location, location[7]),但大多数都无法编译。下面的方法确实可以编译,但是在“Location=”之后的 %s 中没有显示任何内容。我也尝试了 %c,但仍然没有显示任何内容。
void convert_1820_send_temp(int *buff)
{
// have removed other variables
char location[];
// Determine location based on sensor id
if (dev_adr[7] == 181)
{
strcpy(location, "outside");
}
if (dev_adr[7] == 30)
{
strcpy(location, "ceiling");
}
if (dev_adr[7] == 46)
{
strcpy(location, "under ");
}
if (dev_adr[7] == 18)
{
strcpy(location, "inside ");
}
else
{
strcpy(location, "unknown");
}
sprintf(s,
"Temp=%c%d.%d degrees C, sensor=\"%d %d %d %d %d %d %d %d\",Location=%s\r\n",
negSign, tempWhole, decimal, dev_adr[7], dev_adr[6], dev_adr[5],
dev_adr[4], dev_adr[3], dev_adr[2], dev_adr[1], dev_adr[0]), location;
USARTWriteString(s);
}
任何帮助将非常感谢。
【问题讨论】:
-
不要使用strcpy,直接赋值给指针位置。使用 switch case 将使代码更具可读性。您是否打算将最后一个位置保留在 sprintf 之外?
-
谢谢,忘了字符串长度+1规则:)
-
@alk
char location[];是违反约束的。和char *location;不一样。 -
@MattMcNabb:你是对的,gcc 作为扩展定义了它是
location [0].. 清理临时大脑圈...