Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从主C++解析参数_C++_Main_Argv - Fatal编程技术网

从主C++解析参数

从主C++解析参数,c++,main,argv,C++,Main,Argv,可能重复: 基本问题在这里。我用g++编译这个程序,并用一个-r参数运行它,./a.out-r,但是它不会输出下面指定的cout语句。这个代码有什么问题吗 #include <string> using namespace std; int main(int argc, char* argv[]) { if (argv[1] == "-r" ) { cout << "First arg is -r" << endl; }

可能重复:

基本问题在这里。我用g++编译这个程序,并用一个-r参数运行它,./a.out-r,但是它不会输出下面指定的cout语句。这个代码有什么问题吗

#include <string>
using namespace std;

int main(int argc, char* argv[]) {

    if (argv[1] == "-r" ) {
        cout << "First arg is -r" << endl;
    }

    return 0;
}  

您不能使用==来比较字符串文本,因为它所做的是比较指针,即内存地址,在本例中,这些指针总是不同的

使用或比较对象:

if (strcmp(argv[1], "-r") == 0) { ... }


您不能使用==来比较字符串文本,因为它所做的是比较指针,即内存地址,在本例中,这些指针总是不同的

使用或比较对象:

if (strcmp(argv[1], "-r") == 0) { ... }


不能将字符串文字与==进行比较。使用strcmp


另外,不要忘记检查argc是否至少为2。

您不能将字符串文本与==进行比较。使用strcmp


此外,别忘了检查argc是否至少为2。

通常您会按照以下方式执行操作:

while (--argc && **++argv=='-')
{
   char *p;
    p=*argv+1;
    switch(tolower(*p))
    {
        case 'r':                                       
            break;

    }
}

基本上,当剩下一些参数时,检查是否有一个“-”字符,然后打开下一个字符以查看修饰符“r”或“a”等。通常,您会按照以下方式执行操作:

while (--argc && **++argv=='-')
{
   char *p;
    p=*argv+1;
    switch(tolower(*p))
    {
        case 'r':                                       
            break;

    }
}

基本上,当剩下一些参数时,检查是否有“-”字符,然后打开下一个字符以查看修饰符“r”或“a”等。代码中的一个错误是比较字符数组的地址,而不是比较数组中的值。正如人们所说的,您可以使用strcmp以C方式完成,尽管使用strncmp更安全,以避免缓冲区溢出

但是,在C++中使用STD::string更容易。 我会将args复制到字符串向量中

#include <vector>
#include <string>

int main(int argc, char* argv[])
{
    vector<string> args(argv, argv+argc);
    ...

代码中的一个错误是比较char数组的地址,而不是比较数组中的值。正如人们所说的,您可以使用strcmp以C方式完成,尽管使用strncmp更安全,以避免缓冲区溢出

但是,在C++中使用STD::string更容易。 我会将args复制到字符串向量中

#include <vector>
#include <string>

int main(int argc, char* argv[])
{
    vector<string> args(argv, argv+argc);
    ...

这是C++,不是C。我仍然可以使用StcMP?@ TISISCRAZY4:那是因为你把问题标记为C++。你仍然可以在C中使用STRCMP,是的,C++,这就是我的意思。是的,两个选项都可以在C++中使用。但是,在XCODE编译时,我会遇到线程异常。这是C++,而不是C。我仍然可以使用StcMP?@ TISISCRAZY4:那是因为你把问题标记为C++。你仍然可以在C中使用STRCMP,是的,C++,这就是我的意思。是的,两个选项都可以在C++中使用。但是,在Xcode中编译时会出现线程异常。