2015-02-23 18 views
1

我一直在努力使我的工作負載能夠儘可能無痛苦地上傳我的FRC java代碼給github。在這方面,我有此計劃:試圖自動化git,只提交名爲「T」

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    printf("Adding files to commit.\n"); 
    system("git add *"); 

    _TCHAR* commit = argv[1]; 
    printf("Committing changes\n"); 
    char* buffer = new char[300]; 
    sprintf(buffer, "git commit -m '%s' *", commit); 
    system(buffer); 

    printf("Status:\n"); 
    system("git status"); 

    printf("Uploading...\n"); 
    system("git push origin master"); 

    printf("Done!"); 

    return 0; 
} 

問題是,當我傳遞參數「測試」,提交名爲「‘T’」。我怎樣才能解決這個問題?

+2

在'.git/hooks'目錄中有git鉤子,它們可以在提交之前或之後執行,你可以在那裏添加'push'。編寫僅調用shell命令的c程序並不是一個好主意,這就是shell腳本的用處。 – 2015-02-23 03:39:09

回答

0

我懷疑你建立你的程序作爲一個Unicode的程序,因此所有TCHAR -typed變量都是Unicode。當您通過commitsprintf()時,沒有對參數進行類型檢查,因爲它是可變參數參數的一部分。在一個Unicode字符串中,​​將有一個字節,其值爲'T',後跟一個值爲0的字節 - 結束字符串,直到涉及到sprintf()

我建議傾銷TCHAR類型,並只使用char類型爲這個簡單的程序。如果你不想這樣做,那麼整個豬都可以使用基於TCHAR的函數,包括_tprintf()而不是混合TCHAR函數與普通的舊函數char函數。

+0

謝謝,我將代碼中的所有_TCHAR *都改爲char *,並且它工作正常。無論如何,你是FRC的一員嗎? – 2015-02-23 03:57:39

+0

我不這麼認爲 - 我不知道FRC是什麼。 – 2015-02-23 04:21:50