【发布时间】:2015-05-29 10:14:00
【问题描述】:
今天我遇到了一个我无法解决的问题。考虑这段代码 sn-p:
static const char *LOG_MESSAGES[] = {"String1.", "A longer string 2.", "String 3"};
在main() 函数的某个地方,我写道:
printf("%s\n", LOG_MESSAGES[1]);//Prints "A longer string 2." as expected.
char rawLog[100] = {0};
printf("%s\n", rawLog);//Prints an empty string as expected.
snprintf(rawLog, 100, LOG_MESSAGES[1]);
printf("%s\n", rawLog);//Prints "A longer string 2.0". Adds a zero at the end.
我可能遗漏了一些明显的东西,但是这个尾随的零对我来说毫无意义。如果我改变了
snprintf(rawLog, 100, LOG_MESSAGES[1]);
到
snprintf(rawLog, strlen(LOG_MESSAGES[1]), LOG_MESSAGES[1]);
零消失。尽管如此,即使给定的大小为 100,snprintf() 也应该在 LOG_MESSAGES[1] 的末尾停止。
这个零是从哪里来的?
【问题讨论】:
-
最后
'.'重写为'\0'。 -
投票结束:问题中的代码不会导致问题(在 cmets 中发现该错误实际上是在不同的代码中)。