#include <iostream>
int main()
{
using namespace std;
char a[3];
strcpy(a,"affd sfasdfsdf");
cout << a[5] << endl;
cout << a << endl;
}
这里的输出结果居然是:
s
affd sfasdfsdf
奇怪,a的长度明明是3,为什么会有这样的输出结果呢?
#include <iostream>
int main()
{
using namespace std;
char a[3];
strcpy(a,"affd sfasdfsdf");
cout << a[5] << endl;
cout << a << endl;
}
这里的输出结果居然是:
s
affd sfasdfsdf
奇怪,a的长度明明是3,为什么会有这样的输出结果呢?
这个已经超出了a的长度,在vs中能输出,但提示变量a已经被破坏,正常a应该存放两个字符,末尾以\0结束。如果能正常输出,且不提示错误的话,和具体的编译器有关,比如vc的显示结果后会延迟1秒,dev-c++则没有。
3 回答1.9k 阅读✓ 已解决
2 回答3.8k 阅读✓ 已解决
2 回答3.1k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答3.2k 阅读
关于
char *strcpy( char *dest, const char *src );
,去看一下cppreference里的描述:重点是The behavior is undefined if the dest array is not large enough,意思说如果你的
a
没有足够的空间放下你的字符串字面量,编译器可以随心所欲的给出任何结果,也不需要给出任何的报错(当然编译器也可以给出貌似正确的结果就像你给出的stdout
那样)。另外,个人的观点是能用
std::string
的时候(不需要考虑兼容),就尽量不要用char *
,费心费力还容易写错。