C ++中奇怪的字符串运算符=行为

时间:2018-11-14 06:29:20

标签: c++ string

在调试其他人编写的程序时,我遇到了一个奇怪的字符串分配。起初,我很惊讶它甚至可以编译。这是一个示例,在Linux(Ubuntu,CentOS)上进行编译时不会发出警告。

#include <string>
#include <stdio.h>
#include <string.h>

using namespace std;

int main ()
{
  string a;
  char b[40];

  a = "Constant value", strncpy (b, a.c_str (), sizeof (b));
  printf ("a = %s\n", a.c_str ());
  printf ("b = %s\n", b); 

  a = "Constant value";
  strncpy (b, a.c_str (), sizeof (b));
  printf ("a = %s\n", a.c_str ());
  printf ("b = %s\n", b);
}

有人可以解释一下,示例中的第一个字符串赋值到底是什么,在哪里可以找到描述此行为的参考?如您所见,为a分配了一个常量字符串,但是之后有一个逗号(,)和strncpy函数调用,该函数返回char *。为什么在那里接受逗号?根据输出,如果我使用;,并没有什么不同。

1 个答案:

答案 0 :(得分:1)

“,”代表运算符。 “,”的顺序是从左到右,例如,(A,B,C)的值为C。 “;”代表句子的结尾。句子的执行顺序没有改变,因此结果是相同的。