社区
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"
或者其他答案呢?
...全文
5488
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)
strcpy
源码
本文介绍了一个简单的C语言
strcpy
函数实现方法,详细解释了如何使用指针操作来完成字符串的复制,并通过一个示例展示了如何调用这个函数。
string -
strcpy
源码
本文介绍了C++中实现字符串复制功能的
strcpy
函数,包括其使用方法、参数解释及注意事项。详细阐述了如何将一个字符串从一个位置复制到另一个位置,并讨论了与void指针操作的限制。
兴C语言中的字符串操作:从
strcpy
到自定义字符串处理函数M
本文详细介绍了如何使用IExcelRange、IExcelRows和IExcelColumns接口来高效操作Excel单元格区域,包括读写数据、设置格式、处理行和列、优化性能等。涵盖了基础操作、高级功能及实际应用场景。
GNU C字符串程处理函数
本文详细介绍了多种字符串操作函数,包括memccpy(), memcpy(), strcat(), strcmp(),
strcpy
(), strncpy(), 和 strstr()的功能、使用方法及注意事项。
MQX Lite RTOS任务同步:轻量级事件与信号量深度解析与应用实践
本文深入解析MQX Lite RTOS中轻量级事件和轻量级信号量的核心机制与应用实践。事件作为32位标志组,支持广播式通知、自动/手动
清除
模式及多种等待策略;信号量则作为受保护计数器,用于资源互斥与任务同步,但存在优先级反转风险。文章涵盖创建/设置/等待/销毁全流程,强调位掩码设计、超时处理、ISR安全调用及常见坑点规避,适用于嵌入式实时系统开发。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章