2013-02-06 49 views
0

以下的輸出 「STR-3,」 不過,我希望它是 「STR-2,STR-3,」爲什麼下面僅包含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); 
} 
+3

如果源和目的地重疊,則是UB –

回答

6

snprintf C標準(C99,7.19.6.5)的描述表示:

如果進行復制操作的是重疊的對象之間,該行爲理解過程音響定義。

這是因爲str既用作輸入又用作輸出。

相同的限制適用於sprintf。事情發生在你身上的事實只是一個意外,因爲未定義的行爲可能會發生。

相關問題