Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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++ 即使在将新字符串复制到现有字符串之后,也可以使用Old contained(在某些索引中)_C++_String_Strcpy - Fatal编程技术网

C++ 即使在将新字符串复制到现有字符串之后,也可以使用Old contained(在某些索引中)

C++ 即使在将新字符串复制到现有字符串之后,也可以使用Old contained(在某些索引中),c++,string,strcpy,C++,String,Strcpy,我了解到strcpy的工作是将一个字符串的内容复制到另一个字符串中。到目前为止,我一直在想,当我们使用strcpy时,旧的内容会被完全删除,新的内容会被复制。请看以下节目: #include<iostream> #include<string.h> using namespace std; int main() { char str[]="abcdef"; strcpy(str,"xyz"); cout<<str[4]; cout<<

我了解到strcpy的工作是将一个字符串的内容复制到另一个字符串中。到目前为止,我一直在想,当我们使用strcpy时,旧的内容会被完全删除,新的内容会被复制。请看以下节目:

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
  char str[]="abcdef";
  strcpy(str,"xyz");
  cout<<str[4];
  cout<<str;
  return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
char str[]=“abcdef”;
strcpy(str,“xyz”);

cout
'd'
被空终止符覆盖,因此
str[3]
只是一个零。
str[4]
然后包含
'e'
strcpy()
只修改它需要的字符数,它不知道
str
有多长,所以它无法将其余字符归零


如果要真正将数组归零,请在其上使用
memset()

“xyz”在它的末尾有一个\0,这就是为什么你看不到d而看到e。这也是为什么你应该使用std::string而不是C-strings。先生,但是当我们在做
cout@Singh:
cout@MSalters谢谢你,先生。strcpy之后,数组
str
包含
{x',y',z',0',e',f',0}
。请注意,零是空终止符。正如其他人所指出的,打印在第一个空终止符处停止。