社区
C语言
帖子详情
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"
或者其他答案呢?
...全文
5517
37
打赏
收藏
strcpy是清除后copy还是仅仅覆盖copy
char a[7]="abcdef"; char b[4]="ABC"; strcpy(a,b); printf ("%c",a[5]); a这个数组是什么:是"ABC\0ef" 还是"ABC\0" 或者其他答案呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
碧海情天-赵亮
2006-05-12
打赏
举报
回复
明明加上测试代码运行一下就知道结果的,还有疑问吗?
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
打赏
举报
回复
2
总结下
就是当STRCPY复制后,指定的内存内容变成了ABC\0ef
但是当调用printf后,给你一个假象就是好象ef没有了
其实是碰到了\0而终止了输出,ef还是在内存中的
~~~~让我想起了悬挂指针
加载更多回复(17)
Oracle锁表故障处理一例
一次开发人员直接在数据库服务器上做delete table操作系统,由时在上班高峰运行,造成长时间执行无反应,进而把SQLPLUS客户端关闭掉,再次运行删除语句,造成数据库运行缓慢。 询问操作过程知道了是由锁表造成,最终处理;本文只是模拟锁表处理过程,下次遇到相同问题可以快速处理。 1. 查看数据库的等待事件 如果不清楚原因,可以通过先通过等待事件进行分析。 SQL> s
遇到锁表_oracle如何解决锁表问题
oracle如何解决锁表问题Oracle在日常开发过程中,或者业务上线使用过程中,我们会经常遇到锁表问题,导致某一个业务奔溃。这是因为当多个用户同时操作一个表时,或者同一条数据时,很容易发生锁表的情况。这是,由于Oracle数据库为了保持数据的一致性,当某一个用户正在操作一条数据时,若忘记提交,另外一个用户又要对其进行修改时。由于上个操作未提交,导致下一个修改操作一直处于等待状态,当时间长了,就会...
oracle锁表怎么处理,oracle 锁表处理
oracle 锁表处理--查出所有被锁住的表select b.owner TABLEOWNER, b.object_name TABLENAME, c.OSUSER LOCKBY, c.USERNAME LOGINID, c.sid SID, c.SERIAL# SERIALfrom v$locked_object a,dba_objects b, v$session cwhere b.objec...
oracle gc current request,gc current request 引起长期锁表的故障
gc current request 引起长期锁表的故障故障描述:一个数仓系统长期跑批时出现锁表,锁表偶尔严重时影响整体跑批流程,进而影响第2天业务运行。根据业务请求需要进行优化。优化目标尽量减少锁表时间(业务人员最低要求不影响整体跑批流程)。业务人员诉求分析:找出严重锁表原因,解决锁表严重问题不影响整体跑批即可。DBA解决思路分析:现象=》AWR/ASH/ADDM报告和调用(监控foglight...
oracle goldengate 故障处理一例
ogg找不到归档日志。 描述:由于长时间没启动ogg进程,源库的归档日志已经被
清除
,ogg的源库抽取进程卡住abend状态;查看ggserr.log,分析故障原因: 2017-09-26 13:43:59 INFO OGG-01513 Oracle GoldenGate Capture for Oracle, E_LISDB.prm: Positioning to Sequence 1341,
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章