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



在调试别人编写的程序时,我遇到了一个奇怪的字符串赋值。起初我很惊讶它竟然能编译。这里有一个例子,它在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 = %sn", a.c_str ());
  printf ("b = %sn", b); 
  a = "Constant value";
  strncpy (b, a.c_str (), sizeof (b));
  printf ("a = %sn", a.c_str ());
  printf ("b = %sn", b);
}

有人能解释一下,示例中的第一个字符串赋值是什么吗?我在哪里可以找到描述这种行为的引用?正如您所看到的,a被分配了一个常量字符串,但之后有一个逗号(,(和strncpy函数调用,它返回char *。为什么逗号在那里被接受?根据输出,如果我使用;,,也没有什么区别。

","表示运算符。","的顺序是从左到右,例如,(A,B,C(的值是C。";"代表句子的结尾。句子的执行顺序没有改变,所以结果是一样的。

最新更新