C 字符串转换为字符串
C++ String to String Conversion
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
无法知道可以安全地复制多少个字符,因为指针不过是一个内存地址。它不知道该位置有多少内存,所以即使您(例如(在您的情况下)您都脱离了界限),也简单地写所有内容。
诸如您进入代码的事情是指示不安全的原因之一。
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 如何将这个std::字符串转换为std::基本字符串
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 如何在C++中将十六进制字符串转换为文本数据
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何从字符串转换为双精度*
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 如何在C++中将 Python 字符串转换为其转义版本?
- 如何在 C++11 中将标准::字符串转换为标准::u32字符串?
- 如何将整数字符串转换为整数的二维向量?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 将文件复制到自定义位置,存在字符串转换问题
- 将ANSI C字符串转换为UNICODE
- 如何将节点 V8 字符串转换为 C++ 字符串
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将字符串转换为无符号字符数组/字节数组