C 字符串转换为字符串

C++ String to String Conversion

本文关键字:字符串 转换      更新时间:2023-10-16
char ch[3];
strcpy(ch,"Hello");
cout<<ch<<" "<<sizeof(ch);

Q1。当CH的大小为3时,为什么要打印" Hello"?

Q2。如果CH从CH [2]转换为CH [6](通过隐式类型转换),为什么SizeOf(CH)仍然3?

strcpy不做尺寸检查,因此它只是在a的内存地址写下" hello 0",在存储器中覆盖任何位置的内容。

没有进行转换,ch是char [3],就像strcpy之前一样。

我假设当您输入char a[3];时,您的意思是char ch[3];

a1:当您声明某个尺寸的数组时,最大的是 you 不超过它。如果您确实超出了这种情况,则会获得未定义的结果。

a2:您不能这样转换,所以它是一个非问题。

您在那里做一些非常危险的事情。这是使用std::string的原因之一,您不必检查是否范围内进行简单复制。

问题1:
就像其他人已经说过的那样,它打印出"你好"是不确定的行为,任何事情都可能发生。但这不是全部。像您在代码中一样出于界限是危险的。您基本上会有一个缓冲区溢出,如果您在Wikipedia上查看示例,您会发现它几乎与获得的代码相同。

问题2:
没有转换。当您调用strcpy(ch, "Hello");时,您的数组ch会衰减到指针中。strcpy无法知道可以安全地复制多少个字符,因为指针不过是一个内存地址。它不知道该位置有多少内存,所以即使您(例如(在您的情况下)您都脱离了界限),也简单地写所有内容。

诸如您进入代码的事情是指示不安全的原因之一。