2016-09-27 133 views
-3

我遇到了字符串和c的問題。fprintf將垃圾打印到txt文件

我想要做一件非常簡單的事情:將int轉換爲字符串並以下列方式將其打印到txt文件中。

const char * test_string() { 
    char s[5]; 
    int num = 123; 
    sprintf(s, "%d", num); 
    return s; 
} 

int save() { 
    FILE *fh = fopen("test.txt", "w"); 
    const char * text = test_string(); 
    fprintf(fh, "%s", text); 
    fclose(fh); 
} 

然而,這個簡單的任務,我得到以下結果:

Üþ(

我想這個問題一定幫助。提前致謝。

+1

從函數返回局部變量的地址具有未定義的行爲,因爲該函數返回後該變量不再有效。 –

+0

@KerrekSB:我們應該在這個問題中添加一個dup到信息頁面。每隔幾天就會問這個問題。 – Olaf

+0

謝謝。顯然C比看起來更復雜。 – miroki123

回答

2

stest_string中的局部變量,因此在test_string返回時被破壞。然後,您嘗試打印不再存在的變量的值。

+1

它打印的混亂是一個在此期間發生的任何事情都可以用字符串來解釋。 – Carcigenicate