2014-05-23 82 views
0
#include <stdio.h> 
#include <stdlib.h> 
//#include <wchar.h> 

int main(int argc, char **argv) 
{ 
    char *c = (char *)malloc(sizeof(char) * 30); 

    if (argc < 2) 
    {  
     fprintf(stderr, "%s", "argc < 2\n"); 
     exit(1); 
    } 

    sprintf(c, "sprintf() string : %s\t argc: %i", argv[1], argc); 
    fprintf(stdout, "%s\n", c); 
    fprintf(stdout, "%s", "Done!\n"); 
    free(c); 

    return 0; 
} 

我在兩個編譯器上編譯了這個程序,兩者都產生相同的運行時錯誤。但是我不能確定這個錯誤。我在sprintf()中正確格式化了字符串嗎?有什麼我忘記了嗎?sprintf()程序undefined返回值

我運行此程序的argv參數[1] = 「星期日」

+1

請勿投射'malloc':http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc – Barmar

+0

你會得到什麼運行時錯誤? – Barmar

+0

***處理返回-1073741819 *** – skrillac

回答

2

您打印多30字符來c。爲了切斷輸出,當這種情況發生,而不是崩潰,這樣做:

snprintf(c, 30, "bla bla.... 
3

您在規模控制在設定的malloc C至30個字節。

然後在sprintf中寫入28個字節,再加上argv [1]字符串和argc作爲字符串。這幾乎肯定會超過30個字節。

你需要計算你需要的實際大小malloc爲c正確。或者您應該使用snprintf而不是sprintf,您可以使用它來限制寫入30的字符數並避免崩潰。

+0

+1推薦'snprintf'。 – user694733