[英]Parsing argc and argv[] parameter in c
我編寫了以下程序,當我在 x86 配置中編譯程序時運行良好,但是當我將平台配置更改為 x64 時,我的程序根本無法運行。 問題出在哪里:
int main(int argc, char* argv[])
{
char* cp_UserName[MAX_PATH];
char* cp_DomainName[MAX_PATH];
char* cp_HashNtlm[MAX_PATH];
char* cp_ComputerName[MAX_PATH];
DnPthIconSetup();
DnPthInitialization(TRUE);
if (argc > 4)
{
for (size_t i = 1; i <= sizeof(argv); i++)
{
if (strstr(argv[i], "user") != NULL)
{
strtok_s(argv[i], ":", cp_UserName);
}
if (strstr(argv[i], "domain") != NULL)
{
strtok_s(argv[i], ":", cp_DomainName);
}
if (strstr(argv[i], "pc") != NULL)
{
strtok_s(argv[i], ":", cp_ComputerName);
}
if (strstr(argv[i], "ntlm") != NULL)
{
strtok_s(argv[i], ":", cp_HashNtlm);
}
}
printf("%s\n", *cp_UserName);
printf("%s\n", *cp_DomainName);
printf("%s\n", *cp_ComputerName);
printf("%s\n", *cp_HashNtlm);
system("PAUSE");
// ParametricCredentialDispatcher(cp_UserName, cp_DomainName, cp_HashNtlm, cp_ComputerName);
}
else if (argc == 1)
{
InteractiveMode();
}
else
{
printf("\nUsage: ./program user:[] domain:[] pc:[] ntlm:[]\n");
system("PAUSE");
}
return 0;
}
sizeof(argv)
是指針的大小,而不是 arguments 的數量。pc:computer_for_an_user
時,您對strstr
的使用將導致錯誤的結果。strtok_s
的這種用法將存儲指向配置名稱的指針,而不是它們的值。解析部分的可能修復:
for (size_t i = 1; i < arc; i++)
{
if (strncmp(argv[i], "user:", 5) != NULL)
{
*cp_UserName = strchr(argv[i], ':') + 1;
}
if (strncmp(argv[i], "domain:", 7) != NULL)
{
*cp_DomainName = strchr(argv[i], ':') + 1;
}
if (strncmp(argv[i], "pc:", 3) != NULL)
{
*cp_ComputerName = strchr(argv[i], ':') + 1;
}
if (strncmp(argv[i], "ntlm:", 5) != NULL)
{
*cp_HashNtlm = strchr(argv[i], ':') + 1;
}
}
添加的:
在 strncmp 的strncmp
中假設strchr
不會返回NULL
。
您還應該初始化指針並檢查它們是否不是NULL
,然后再將它們傳遞給printf
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.