2 qq 18952005 qq_18952005 于 2016.03.03 19:59 提问

使用strcpy拷贝后,打印src数组是空的

源码:
1 #include
2 #include
3
4 using namespace std;
5
6 int main(int argc, char *argv[])
7 {
8 char src[6] = "hello";
9 char dest[5];
10 strcpy(dest,src);
11 cout<<"dest= "<<dest<<endl;
12 cout<<"src= "<<src<<endl;
13 }

运行结果:

~ dest= hello
src=
谁能告诉我,为什么src没有内容输出???

4个回答

caozhy
caozhy   Ds   Rxr 2016.03.03 21:03

我这里的运行结果
dest= hello
src= hello
Press any key to continue

caozhy
caozhy   Ds   Rxr 2016.03.03 21:05

不但我的VC++如此,在线的gcc的输出也如此
http://codepad.org/GdcdGNe4
dest= hello
src= hello

caozhy
caozhy   Ds   Rxr 2016.03.03 21:05

但是注意,这其实造成缓冲区的溢出了。

haoxin1210
haoxin1210   2016.03.03 21:58

数组长度声明不够,缓冲区溢出

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
数组与strcpy
示例说明1 · 最终答案输出是 "ABC\0"; · 为什么答案不是"ABC\0ef";  (1) strcpy会拷贝‘/0’.  (2) 用printf输出时,遇到‘/0’就会结束输出。 所以会出现上面的结果。   总之:复制就是用新的内容覆盖原有的内容,包括结束标志,所以以字符串格式输出时,就只是输出被复制的内容,碰到结束标志时就结束了,原来没
字符串复制strcpy()实现及常见问题
原型:char* strcpy(char* des , const char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。 实现: char *strcpy(char *des, const char *src){ assert( (NULL!= des) && (NULL != src) ); char * address
数组中使用strcpy、memcpy复制字符串,末尾添加‘\0’
以前在数组中使用strcpy、memcpy时候复制字符串时没怎么注意字符串结束符号‘\0’, 在前几天在打印一个二维数组点阵的时候发现在数组中使用strcpy、memcpy复制字符串,字符串 末尾的结束‘\0’也会占用数组的一个位置,如过打印并不会打印出来,以下是测试代码: 打印结果:全是点 然后使用strcpy复制了两行串字符串: 以下是代码: 结果,
【c语言】 my_strcpy 实现字符串拷贝
原型声明:char *my_strcpy(char *dst,char const *src) 功能:把src所指由'\0'结束的字符串复制到dst所指的数组中。 说明:1.src和dst所指的内存区域不可以重叠;             2.dst必须有足够的空间来容纳src的字符串;            3.返回指向dst的指针。 代码如下: #include #include
关于strcpy 和数组越界的问题
我们先看下面这段程序, 程序执行结果为: 我们没有对字符数组str1进行操作,str1[]的值不是abcd而是3 ,这是为什么呢? 要解决这个问题,我们首先要解决两个问题: 1.strcpy函数的使用方法 2.局部变量在栈中是如何存储的 一 . strcpy 函数 这是strcnp函数的原型 使用str
char数组和char*还有strcpy函数
#include #include #include using namespace std; char* Strcpy(char* des, const char* source) { char* r = des; assert((des != NULL) && (source != NULL)); //首先必须判断两个指针是否为空,由于复制后的指针需要返回,因此需要一个
memset+strcpy+strncpy的函数详解以及字符数组输出的特殊情况
memset: 头文件:#include在 原型:   void *memset(void *s, int c, size_t n); 将已开辟内存空间的s所指向的每一块内存中的每一个字节全部设定为c为ASCII码!!! The  memset()  function  fills  the  first  n  bytes of the memory area  pointed to b
字符串拷贝函数 char *strcpy(char *strDst,const char *strSrc)
字符串函数原型为 char * strcpy(char *strDst,const char *strSrc)   char *strcpy(char *strDst,const char *strSrc)//使用const表明原字符串是不可变得,此外还用const来表示*strScr是输入参数 {    char *address=strDst;//保存目的串的首地址,因
strcpy(字符串复制)和memcpy(内存复制)
strcpy用于字符串的复制,memcpy用于内存复制,没有类型限制。版权声明:本文来自博客园_Echo Jin的文章,网址:http://www.cnblogs.com/stoneJin/archive/2011/09/16/2179248.html   在此对原作者表示感谢。   strcpy和memcpy的区别 strcpy和memcpy都是标准C库函数,它们有下面的特点。
C语言:重写strcpy函数,拷贝字符串的内容
strcpy函数是用来拷贝字符串的函数,str1[]中的字符拷贝到str2[]中。 重写strcpy就是再不调用头文件#include的strcpy函数,