Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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++ 为什么不是';strcmp()是否按我所认为的那样工作?c++;_C++_Strcmp - Fatal编程技术网

C++ 为什么不是';strcmp()是否按我所认为的那样工作?c++;

C++ 为什么不是';strcmp()是否按我所认为的那样工作?c++;,c++,strcmp,C++,Strcmp,由于某些原因,strcmp()没有返回它应该返回的0。代码如下: #include <iostream> #include <ccstring> int main() { char buffer[2]; buffer[0] = 'o'; char buffer2[2]; char buffer2[0] = 'o'; cout<<strcmp(buffer, buffer2); } #包括 #包

由于某些原因,strcmp()没有返回它应该返回的0。代码如下:

#include <iostream>
#include <ccstring>

int main()
{
      char buffer[2];
      buffer[0] = 'o';

      char buffer2[2];
      char buffer2[0] = 'o';

      cout<<strcmp(buffer, buffer2);
}
#包括
#包括
int main()
{
字符缓冲区[2];
缓冲区[0]=“o”;
字符缓冲区2[2];
字符缓冲区2[0]=“o”;

coutC字符串以零结尾


您的字符串不是。这只是未定义的行为。任何情况都可能发生。

C字符串以零结尾


您的字符串不是。这只是未定义的行为。任何情况都可能发生。

在比较之前先终止字符串

    #include <iostream>
    #include <ccstring>

    int main()
    {
          char buffer[2];
          buffer[0] = 'o';
          buffer[1] = 0;  <--

          char buffer2[2];
          buffer2[0] = 'o';
              buffer2[1] = 0;  <--

          cout<<strcmp(buffer, buffer2);
    }
#包括
#包括
int main()
{
字符缓冲区[2];
缓冲区[0]=“o”;

缓冲区[1]=0;在比较之前先终止字符串

    #include <iostream>
    #include <ccstring>

    int main()
    {
          char buffer[2];
          buffer[0] = 'o';
          buffer[1] = 0;  <--

          char buffer2[2];
          buffer2[0] = 'o';
              buffer2[1] = 0;  <--

          cout<<strcmp(buffer, buffer2);
    }
#包括
#包括
int main()
{
字符缓冲区[2];
缓冲区[0]=“o”;

缓冲区[1]=0;感谢您的快速回复。字符数组不是用空终止符初始化的吗?这只适用于用字符串文字初始化数组的情况吗?因此它只适用于字符缓冲区[]=“o”局部变量不是初始化的,除非明确地告诉。是的,这就是你告诉它的方式。谢谢!我想我需要从java的方式去做一些事情。哈哈,如果你想用C++的方式来做,忘记字符数组和代码> STRCMP <代码>:使用<代码> STD::String < /Calp> S,并比较它们。java通常喜欢安全,而C++更喜欢优化机会。记住这一点,很多事情都有意义。如果不是瓶颈,就去跟读<代码> STD::String 建议@ FrdodoFLUW。谢谢快速回复。不是用空终止符初始化char数组,还是只做一个空的终止符?当数组用字符串文字初始化时使用pply?因此它仅适用于char buffer[]=“o”局部变量不是初始化的,除非明确地告诉。是的,这就是你告诉它的方式。谢谢!我想我需要从java的方式去做一些事情。哈哈,如果你想用C++的方式来做,忘记字符数组和代码> STRCMP <代码>:使用<代码> STD::String < /Calp> S,并比较它们。java通常喜欢安全,而C++更喜欢优化机会。记住这一点,很多事情都有意义。如果不是瓶颈,就去跟上<代码> STD::String < /C> >建议@ FrdodoFLUP。非常棒的回答,非常感谢!所以,除非是SP,所以没有用空终止符初始化char数组。具体定义?@user3367265如果它们是静态的,则任何未指定的元素都将被零初始化。否则,如果指定任何初始化,则未指定的元素将被零初始化。(例如,
char b[2]={o'};
)。但如果不指定任何内容,则它们根本不会初始化。@user3367265:更具体地说,变量是默认初始化的,除非另有指定,否则对于用户类型意味着调用默认构造函数,对于内置类型意味着什么也不做。全局变量是一个值得注意的例外(命名空间级别的变量、类静态成员和本地静态变量)值已初始化,对于用户定义的类型意味着调用默认构造函数,而对于内置类型意味着零初始化(顾名思义…将0放在那里).some-answer,非常感谢!所以除非特别定义,否则字符数组永远不会用空终止符初始化?@user3367265如果它们是静态的,任何未指定的元素都将被零初始化。否则,如果指定任何初始化,则未指定的元素将被零初始化。(例如,
char b[2]={'o'};
)。但如果不指定任何内容,则它们根本不会初始化。@user3367265:更具体地说,变量是默认初始化的,除非另有指定,否则对于用户类型意味着调用默认构造函数,对于内置类型意味着什么也不做。全局变量是一个值得注意的例外(命名空间级别的变量、类静态成员和本地静态变量)值已初始化,对于用户定义的类型意味着调用默认构造函数,而对于内置类型意味着零初始化(顾名思义…将0放在那里)。