我是cpp的初学者,并且遇到以下代码问题。通常它应该根据argv [1]显示文本,但它不显示任何内容。
我做错了什么?
#include <stdio.h>
int main (int argc, char* argv[])
{
if(argv[1] == "a" && argc > 1) printf("hello world, argc: %d\n", argc);
else if(argv[1] == "2" && argc > 1) printf("hello everyone, argc: %d\n", argc);
for(int i=0; i<argc; i++) printf("%s\n", argv[i]);
return 0;
}
答案 0 :(得分:5)
使用strcmp
,以下代码应该有效:
#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;
}
由于问题已标记为C++
,因此请使用以下内容更多C++
- 如:
#include <iostream>
#include <string>
int main (int argc, char* argv[]) {
if(argc > 1) {
std::string argv1(argv[1]);
if (argv1 == "a") {
std::cout << "hello world, argc: " << argc << std::endl;
} else if (argv1 == "2") {
std::cout << "hello everyone, argc: " << argc << std::endl;
}
}
for(int i=0; i<argc; i++) {
std::cout << argv[i] << std::endl;
}
return 0;
}
答案 1 :(得分:3)
代码中最重要的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;
}