为什么argv不起作用
Why does not argv work?
我是cpp的初学者,下面的代码有问题。通常,它应该根据argv[1]显示文本,但不显示任何内容。
我做错了什么?
#include <stdio.h>
int main (int argc, char* argv[])
{
if(argv[1] == "a" && argc > 1) printf("hello world, argc: %dn", argc);
else if(argv[1] == "2" && argc > 1) printf("hello everyone, argc: %dn", argc);
for(int i=0; i<argc; i++) printf("%sn", argv[i]);
return 0;
}
使用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: %dn", argc);
} else if(argc > 1 && strcmp(argv[1], "2") == 0) {
printf("hello everyone, argc: %dn", argc);
}
for(int i=0; i<argc; i++) printf("%sn", 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;
}
代码中最重要的两个问题:
- 在检查参数之前,应检查参数的数量
- 字符串使用标准库函数(如
strcmp()
)进行比较或者如果您知道最大长度,甚至更好的CCD_ 5
这是一个有效的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: %dn", argc);
}
else if ((argc > 1) && (strcmp(argv[1], "2") == 0))
{
printf("hello everyone, argc: %dn", argc);
}
for (int i = 0; i < argc; i++)
printf("%sn", 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: %dn", argc);
}
else if ((argc > 1) && (std::string(argv[1]) == "2"))
{
printf("hello everyone, argc: %dn", argc);
}
for (int i = 0; i < argc; i++)
printf("%sn", argv[i]);
return 0;
}
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- C++Matching Brackets 2解决方案不起作用
- 为什么这段代码不起作用,我该如何解决?
- 为什么argv不起作用