为什么以下仅包含str-3

时间:2013-02-06 17:56:55

标签: c

以下输出是“str-3”,但我希望它是“str-2,str-3”,

如果我将snprintf更改为sprintf,那么这就是我预期的方式;不应该snprintf和sprintf表现一样吗?

int main (int argc, char **argv)
{
    char str[64];

    str[0] = '\0';

    snprintf(str, 64, "%s%s,", str, "str-2");
    snprintf(str, 64, "%s%s,", str, "str-3");

    printf("%s\n",str);
}

1 个答案:

答案 0 :(得分:7)

C标准中的snprintf说明(C99,7.19.6.5)说:

  

如果在重叠的对象之间进行复制,则行为未定义。

这就是这里发生的事情,因为str被用作输入和输出。

同样的限制适用于sprintf。它碰巧适合你的事实只是一个意外,就像未定义的行为一样。