比较两个char*是否相等

Bry*_*ong 10 c++ c-strings

可能重复:
比较两个C风格字符串的正确功能是什么?

我的比赛条件不起作用!有人可以建议如何比较C风格的字符串?

void saveData(string line, char* data){
    char *testString = new char[800];
    char *stpr;
    int i=0;
    bool isData=false;
    char *com = data;
    strcpy(testString,line.c_str());
        stpr = strtok(testString, ",");
        while (stpr != NULL) {
            string temp = stpr;
            cout << temp << " ===== " << data << endl;
Run Code Online (Sandbox Code Playgroud)

尽管tempdata比赛,以下条件不工作:

if (stpr==data) {
  isData = true; 
}
Run Code Online (Sandbox Code Playgroud)

不确定这是否有帮助.该SaveData()函数从以下函数调用:

void readFile(char* str){
    string c="", line, fileName="result.txt", data(str);
        ifstream inFile;
    inFile.open(fileName.c_str());
    resultlist.clear();

    if(inFile.good()){    
        while(!inFile.eof()){
            getline(inFile, line);
            if(line.find(data)!=string::npos){
                cout << line << endl;
            }
            saveData(line, str);
        }
        inFile.close();
    }

}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 18

由于这两个stprdata是C字符串,您需要使用strcmp():

#include <string.h>
...
if (strcmp(stpr, data) == 0) {
    // strings are equal
    ...
} else {
    // strings are NOT equal
}
Run Code Online (Sandbox Code Playgroud)


Cod*_*ash 5

这种情况不会起作用,因为==操作员没有超载char*.

if(stpr==data)
{ 
  isData = true; 
}
Run Code Online (Sandbox Code Playgroud)

请改用它.

if (strcmp(stpr, data) == 0)
{
  isData = true ;
}
Run Code Online (Sandbox Code Playgroud)

strcmp()0如果两个cstrings相等则返回.确保您匹配的两个cstrings都拥有一些合法的内存,并在最后终止.

编辑:

为了避免任何麻烦和错误,建议不要使用raw char*和use std::string.所以最好让它们成为字符串并进行比较.

std::string data ;   //passed or declared as string
std::string stpr ;
.....
//Do some work.

if (stpr == data)
   //do work here
Run Code Online (Sandbox Code Playgroud)

这种方法可以为您节省很多麻烦.

  • `0 == strcmp`看起来比`!strcmp`恕我直言 (3认同)