为了账号安全,请及时绑定邮箱和手机立即绑定

C++ strcpy()的用法

C++ strcpy()的用法

C++
幕布斯6054654 2018-09-06 17:34:14
#include <iostream>int main(){    using namespace std;    char a[3];    strcpy(a,"affd sfasdfsdf");    cout << a[5] << endl;    cout << a << endl; }这里的输出结果居然是:saffd sfasdfsdf奇怪,a的长度明明是3,为什么会有这样的输出结果呢?
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

关于char *strcpy( char *dest, const char *src );,去看一下cppreference里的描述:

Copies the null-terminated byte string pointed to by src, including
the null terminator, to the character array whose first element is
pointed to by dest. The behavior is undefined if the dest array is
not large enough. The behavior is undefined if the strings overlap.
The behavior is undefined if either dest is not a pointer to a
character array or src is not a pointer to a null-terminated byte
string.

重点是The behavior is undefined if the dest array is not large enough,意思说如果你的a没有足够的空间放下你的字符串字面量,编译器可以随心所欲的给出任何结果,也不需要给出任何的报错(当然编译器也可以给出貌似正确的结果就像你给出的stdout那样)。

另外,个人的观点是能用std::string的时候(不需要考虑兼容),就尽量不要用char *,费心费力还容易写错。


查看完整回答
反对 回复 2018-09-08
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

这个已经超出了a的长度,在vs中能输出,但提示变量a已经被破坏,正常a应该存放两个字符,末尾以\0结束。如果能正常输出,且不提示错误的话,和具体的编译器有关,比如vc的显示结果后会延迟1秒,dev-c++则没有。

查看完整回答
反对 回复 2018-09-08
  • 2 回答
  • 0 关注
  • 1123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信