snprintf
Pebble Sdk 2.x 中的实现似乎有些奇怪
我修改了示例程序以显示点击计数器。如果我使用 str[1000] 大小,则以下代码有效
selectCount ++;
char str[1000], buf[100];
snprintf(str, 1000, "Click %d foo", selectCount);
snprintf(buf, 100, "s(%d) one two l(%d)", sizeof(str), strlen(str) );
if(selectCount % 2)
text_layer_set_text(text_layer, buf );
else
text_layer_set_text(text_layer, str );
但是如果我将 str 的缓冲区大小减小到 400,应用程序就会崩溃
selectCount ++;
char str[400], buf[100];
snprintf(str, 400, "Click %d foo", selectCount);
snprintf(buf, 100, "s(%d) one two l(%d)", sizeof(str), strlen(str) );
if(selectCount % 2)
text_layer_set_text(text_layer, buf );
else
text_layer_set_text(text_layer, str );
但同样,如果我将 str 的大小减小到 20,它不会崩溃。相反,它将 buf 截断为 7 个字符;并且在 text_layer 中根本不显示 str 。
当我执行时,非崩溃案例中的值看起来不错
APP_LOG(APP_LOG_LEVEL_DEBUG, str);
对此的任何帮助表示赞赏。提前致谢。