次の出力は「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);
}