c ++中的C字符串比较问题

Tha*_*now 0 c++ cstring

我在c ++程序中遇到了比较问题.这是简化版.

#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[])
{
    if(argc>2){cout<<"3+Args"<<endl;}else//???
    if(argc==2){
        cout<<"2args"<<endl;
        if(argv[1]=="/hide-icons"){}
        if(argv[1]=="/show-icons"){}
        if(argv[1]=="/reinstall"){setAsDefault();}
        if(argv[1]=="/?"){showPossibleCommands();}
        if(argv[1]=="/1"){cout<<"go"<<endl;FirstRun();}
    }else{showPossibleCommands();cout<<argv[0]<<endl;}
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行"programname.exe/1"时,我的程序写入"2args"而不是"go".我错过了一些明显的东西吗

Ale*_*lli 18

argv[1]是一个char*,所以通过测试==你正在检查指针是否指向与你正在使用的各种字符串常量的开头相同的位置......但事实并非如此.要比较内容,请使用strcmp.

  • 或stricmp如果您希望参数不区分大小写 (3认同)
  • `stricmp()`不是标准的.Chere没有真正的标准C(或者据我所知的C++ - 请求真正的C++程序员)进行不区分大小写的字符串比较.GCC提供strcasecmp,VC++提供stricmp ... (2认同)

Nil*_*nck 5

问题是,你的代码比较了字符串的指针,而不是stings本身.

您必须将比较替换为对字符串比较函数的调用.

例如

if(argv[1]=="/1"){cout<<"go"<<endl;FirstRun();}
Run Code Online (Sandbox Code Playgroud)

if(strcmp(argv[1],"/1") == 0) {cout<<"go"<<endl;FirstRun();}
Run Code Online (Sandbox Code Playgroud)

您可能必须包含string.h才能将strcmp原型放入代码中.