2與你的代碼最重要的問題:
- 你要檢查參數號碼前檢查參數。
- 如果您知道最大長度,則使用標準庫函數(如
strcmp()
或甚至更好strncmp()
)比較字符串。
這是C代碼的工作。希望這個幫助。
#include <stdio.h>
#include <string.h>
int main (int argc, char* argv[])
{
if ((argc > 1) && ((strcmp(argv[1], "a") == 0)))
{
printf("hello world, argc: %d\n", argc);
}
else if ((argc > 1) && (strcmp(argv[1], "2") == 0))
{
printf("hello everyone, argc: %d\n", argc);
}
for (int i = 0; i < argc; i++)
printf("%s\n", argv[i]);
return 0;
}
一些細節比較字符串。如果你在這裏使用==
運算符(如果你沒有超載它),你只需比較對象地址(仔細看看,你在這兩種情況下都有char *
)。顯然你的字符串文字和參數緩衝區有不同的地址。你需要比較內容。其實在C++中,你可以構造std::string
並使用比較運算符。
使作品基於==
運營商另一個更多的C++解決方案:
#include <stdio.h>
#include <string>
int main (int argc, char* argv[])
{
if ((argc > 1) && (std::string(argv[1]) == "a"))
{
printf("hello world, argc: %d\n", argc);
}
else if ((argc > 1) && (std::string(argv[1]) == "2"))
{
printf("hello everyone, argc: %d\n", argc);
}
for (int i = 0; i < argc; i++)
printf("%s\n", argv[i]);
return 0;
}
您需要使用'strcmp'而不是== == –
@Andreas非常快速的一個:) – ha9u63ar
因爲它被標記爲C++,所以'(std :: string(argv [1])==「a」)'可能更合適。 – Roddy