【发布时间】:2014-01-08 15:00:04
【问题描述】:
我正在为 Pebble 进行开发,但起步并不顺利。
我正在尝试用 2 个字符串和 2 个值填充 text_layer,如下所示:
等待平均:3 最大:5
由于 Pebble SDK 不支持 malloc,因此我无法使用 sprintf,因此我只能使用 snprintf。以下代码只打印“4”:
srand(time(NULL));
int average = (rand()%6)+1;
int maximum = average + 2;
static char *avgText="WAIT AVG: ";
static char *maxText="MAX: ";
snprintf(labelText,sizeof(avgText) + sizeof(average) + sizeof(maxText) + sizeof(maximum),"%s %d %s %d",avgText,average,maxText,maximum);
任何帮助将不胜感激。我知道我可以创建 4 个单独的 TextLayers,但这对我来说是最后的手段。
【问题讨论】:
-
为什么
sprintf依赖于malloc? -
@CoryNelson 有一点,snprintf 只需要一个额外的参数
n来防止缓冲区溢出,因为n是要填充的最大缓冲区容量 -
@Siidheesh 这太冗长了。
sizeof(char)按标准保证为1。 -
@CoryNelson,这里是多余的,但如果他迁移到宽字符类型,包含
sizeof(the type used)会很有用:),但不确定 Pebble SDK 是否支持宽字符 -
@CoryNelson - 我猜他们最初省略了
sprintf以避免膨胀,然后在避免缓冲区溢出的可疑前提下让步并添加snprintf。它没有! stackoverflow.com/questions/12275381/strncpy-vs-sprintf
标签: c sizeof strlen printf pebble-sdk