C++ 为什么克朗不知道strcmp?

C++ 为什么克朗不知道strcmp?,c++,clang,strcmp,C++,Clang,Strcmp,我有一个比较两个字符串的基本程序: #include <string> #include <iostream> using namespace std; int main (int argc, char *argv[]) { if(strcmp (argv[0],"./test") != 0) { cout << "not equal" << endl; } else { cout << "equal" &l

我有一个比较两个字符串的基本程序:

#include <string>
#include <iostream>

using namespace std;

int main (int argc, char *argv[]) {
  if(strcmp (argv[0],"./test") != 0) {
    cout << "not equal" << endl;
  } else {
    cout << "equal" << endl;
  }
  return 0;
}
为什么它不能用叮当声编译


编辑:人们对堆栈溢出越来越苛刻,以至于我不愿意发表一个问题。上面的问题有一个简单的答案,很好,但是否决投票问题(第一分钟两次!)是正常的,因为他们有一个简单但不明显的答案吗

您没有包含正确的头文件

#include <cstring>
#包括

您必须包括
<代码> <代码>是C++字符串的标头。

您需要<代码>包含< < /代码>(或可能<代码>包含)< /P> 许多编译器在包含其他编译器时包含额外的标准头。标准允许这样做;您有责任使用保证您所使用内容声明的标题,而不仅仅是碰巧有编译器声明的标题。

使用

#include <string.h>
#包括

#包括
而不是

#include <string>
#包括

<强>字符串string.h表示以C为零结尾的字符*字符串 cString 类似String .h,但对于C++。

它使用gcc的原因可能是不同的警告/错误级别设置。可以编译代码,而不必#包含头并声明strcmp。编译器将无法执行类型检查,但符号仍由链接器解析

您还可以避免完全使用strcmp并编写

#include <string>
#include <iostream>

int main (int argc, char *argv[]) {
  std::string command = argv[0];

  if( command != "./test" ) {
    std::cout << "not equal" << endl;
  } else {
    std::cout << "equal" << endl;
  }
  return 0;
}
#包括
#包括
int main(int argc,char*argv[]){
std::string命令=argv[0];
如果(命令!=“/测试”){

std::我不知道为什么人们会否决这个问题。这是一个明确的、有效的问题。“这个问题没有显示出任何研究成果”。在谷歌上,“strcmp”的第一个热门词是一个代码示例,带有
#include
(这也是一个有效的解决方案).Minimal research会回答这个问题。这就是为什么我否决了它。琐碎的问题会降低这个网站的价值。制作一个简单的例子并在两个编译器上比较结果是研究工作。在发布之前,我将谷歌上第一个例子的代码复制并粘贴到一个文件中,然后思考“我应该像对待iostream一样从包含中删除这些“.h”"。我错了,但肯定不是懒惰。此外,我的最低限度的例子与gcc合作,因此我感到惊讶。我认为你得出结论并判断我和我在这一点上的意图有点快。好的,没问题,我会读到:)我想如果否决票附带一条解释为什么否决的评论,会有所帮助。让我们忘记这一切。<代码> String。h代码> C是标题;正确的C++头是“代码> cString < /Cord>”,因为它使所有东西都在命名空间STD中。@ GriWes OK,很好知道。即使在C++中,也不存在使用String .h的缺点。我把这个答案当作是接受的,因为它给出了我的解释。interesting@TomasAnDRLE注意到,字符串> h <代码>在C++中被禁止,并且应该避免使用它。<代码> String。h < /C> > C标题;只有正确的C++头是“代码> cString < /Cord>”,因为它使所有东西都在<代码>命名空间STD< /COD>中。@戴夫斯,有什么证据吗?我找不到任何关于标准的贬义。@ Gries: OOOP.我完全误解了SECITI。在上。我已删除该评论。
#include <string>
#include <string>
#include <iostream>

int main (int argc, char *argv[]) {
  std::string command = argv[0];

  if( command != "./test" ) {
    std::cout << "not equal" << endl;
  } else {
    std::cout << "equal" << endl;
  }
  return 0;
}