Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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++ 奇怪的字符串运算符=C++;_C++_String - Fatal编程技术网

C++ 奇怪的字符串运算符=C++;

C++ 奇怪的字符串运算符=C++;,c++,string,C++,String,在调试别人编写的程序时,我遇到了一个奇怪的字符串赋值。起初,我很惊讶它竟然能编译。下面是一个例子,它在Linux(Ubuntu,CentOS)上编译时没有警告 #包括 #包括 #包括 使用名称空间std; int main() { 字符串a; charb[40]; a=“常量值”,strncpy(b,a.c_str(),sizeof(b)); printf(“a=%s\n”,a.c_str()); printf(“b=%s\n”,b); a=“定值”; strncpy(b,a.c_str(),s

在调试别人编写的程序时,我遇到了一个奇怪的字符串赋值。起初,我很惊讶它竟然能编译。下面是一个例子,它在Linux(Ubuntu,CentOS)上编译时没有警告

#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串a;
charb[40];
a=“常量值”,strncpy(b,a.c_str(),sizeof(b));
printf(“a=%s\n”,a.c_str());
printf(“b=%s\n”,b);
a=“定值”;
strncpy(b,a.c_str(),sizeof(b));
printf(“a=%s\n”,a.c_str());
printf(“b=%s\n”,b);
}
有人能解释一下,示例中的第一个字符串赋值到底是什么,我在哪里可以找到描述这种行为的引用?如您所见,
a
被分配了一个常量字符串,但之后是一个逗号(
)和
strncpy
函数调用,它返回
char*
。为什么那里接受逗号?根据输出,如果我使用
,则不会产生任何差异

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

注意,这里随意使用的
strncpy
,并不比普通的
strcpy
更“安全”;它只是将超长字符串上的崩溃移动到其他位置。如果您要使用
strncpy
(您应该很少这样做;它不是一般的字符串副本),请阅读并摘要它。
#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);
}