试图自动化git,只提交名为" T"

时间:2015-02-23 03:36:47

标签: c git

我一直在尝试将我的FRC java代码上传到github的工作量尽可能无痛。在这,我做了这个程序:

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;
}

问题是当我传递参数"测试"时,提交被命名为"''""'''''''''我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我怀疑您将程序构建为Unicode程序,因此所有TCHAR类型的变量都是Unicode。当您将commit传递给sprintf()时,对参数没有进行类型检查,因为它是vararg参数的一部分。在Unicode字符串中,"Test"将有一个值为'T'的字节后跟一个值为0的字节 - 就sprintf()而言结束字符串。

我建议转储TCHAR类型,并为这个简单的程序使用char类型。如果您不想这样做,那么请全力以赴并使用基于TCHAR的函数,包括_tprintf(),而不是将TCHAR函数与普通的旧char函数混合。< / p>