strcpy是清除后copy还是仅仅覆盖copy

MorningTea 2006-05-11 11:57:15
char a[7]="abcdef";
char b[4]="ABC";
strcpy(a,b);
printf ("%c",a[5]);

a这个数组是什么:是"ABC\0ef"
还是"ABC\0"
或者其他答案呢?
...全文
5117 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
MorningTea 2006-05-19
  • 打赏
  • 举报
回复
了解,谢谢大家:-)
pacman2000 2006-05-17
  • 打赏
  • 举报
回复
本就无所谓复制还是加的'\0'。 你可以认为'\0'就是源串中带来的啊。
MorningTea 2006-05-17
  • 打赏
  • 举报
回复
对答案是什么不是我问问题的关键,刚开始我也是不是很清楚答案是什么,因为我没有任何c的编译测试工具,我主要是想问清楚strcpy的工作方式,我只有有书本写到strcpy的原来函数:

while((*strDes++ = *strSrc++)!='\0')
这样看来也说不能明确的说是自动负值还是copy过来,感觉都对呀!
之所以认为结束,是要碰到'\0'才认为结束,但是'\0'的得到,也是从strSrc copy过来的??
如果改成:
...
while(*strSrc!='\0'){
*strDes = *strSrc;
strDes++;
strSrc++;
}
*strDes = '\0';
...
感觉也没有错呀.好象也没有明确说某种写法就是标准的strcpy函数的原形.
我自己认为是:覆盖copy,判断结束的flag是遇到'\0'...
SAMUEL_NAME 2006-05-17
  • 打赏
  • 举报
回复 1
答案是 ABC\0ef\0
strcpy仅仅是覆盖

如果你用的是VC 可以通过调试看到执行strcpy后的数组a的状态
niatclock 2006-05-17
  • 打赏
  • 举报
回复
MARK
zidane_yubo 2006-05-17
  • 打赏
  • 举报
回复
ABC\0ef\0
laiwusheng 2006-05-13
  • 打赏
  • 举报
回复
#include "stdio.h"
int main()
{ char a[7]="abcdef";
char b[4]="ABC";
strcpy(a,b);
printf ("%s",a);
getch();
}/*这样输出ABC*/
iambic 2006-05-13
  • 打赏
  • 举报
回复
FT,stcpy这么简单的函数,找段源码看看就知道了。
piaozhou_cd 2006-05-13
  • 打赏
  • 举报
回复
结果是 "ABC\0ef"
要不各位找个编译器试试
hszr99 2006-05-12
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>

main()
{
int i;
char a[7]="abcdef";
char b[4]="ABC";
strcpy(a,b);
printf("\n");
for(i=0;i<7;i++)
printf ("%c",a[i]);
printf("\n%s", a);
}
输出结果:ABC ef
ABC
自己分析
yinqing_yx 2006-05-12
  • 打赏
  • 举报
回复
少加个括号 ~
yinqing_yx 2006-05-12
  • 打赏
  • 举报
回复
看一下strcpy的实现方法就明白了~
while(*strDes++ = *strSrc++ && *strDes != '\0' )
jimsleon 2006-05-12
  • 打赏
  • 举报
回复
覆盖COpy
  • 打赏
  • 举报
回复
明明加上测试代码运行一下就知道结果的,还有疑问吗?
linanlucky 2006-05-12
  • 打赏
  • 举报
回复
数组a: ABC\0ef\0
打出: ABC ef ;

ls82930 2006-05-12
  • 打赏
  • 举报
回复
运行结果是ABC,strcpy的作用,是对b进行了一份拷贝,整体的拷贝,而不是一个字符一个字符的覆盖,呵呵,上面有的人有点想当然了。。。。
wxh2204497 2006-05-12
  • 打赏
  • 举报
回复
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ ) /* Copy src over dst */
return( dst );
}
char a[7]="abcdef";
char b[4]="ABC";
strcpy(a,b);
printf ("%c",a[5]);

a这个数组是什么:是"ABC\0ef"
还是"ABC\0"
或者其他答案呢?

指定的内存内容变成了ABC\0ef
这个函数本身也有毛病,比如参数要求等,不过哪有那么完美
不符合自己要求 可以自己写哦
code_tin 2006-05-12
  • 打赏
  • 举报
回复
高手太多插不上嘴了。。。
SJMSYQ 2006-05-12
  • 打赏
  • 举报
回复
回答结果应该为:ABC ed 或 ABCed 看所用c/vc版本
Jedimaster 2006-05-12
  • 打赏
  • 举报
回复 1
总结下

就是当STRCPY复制后,指定的内存内容变成了ABC\0ef

但是当调用printf后,给你一个假象就是好象ef没有了

其实是碰到了\0而终止了输出,ef还是在内存中的

~~~~让我想起了悬挂指针
加载更多回复(17)

70,019

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧