社区
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"
或者其他答案呢?
...全文
5117
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
作业
写回复
配置赞助广告
用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
打赏
举报
回复
1
总结下
就是当STRCPY复制后,指定的内存内容变成了ABC\0ef
但是当调用printf后,给你一个假象就是好象ef没有了
其实是碰到了\0而终止了输出,ef还是在内存中的
~~~~让我想起了悬挂指针
加载更多回复(17)
ValueInternals..
// A "safe" implementation of strdup. Allow null pointer to be passed. // Also avoid warning on msvc80.
VC++小程序:自动复制文本到剪贴板
你不用手动逐字地输入密码 只需用Ctrl+C输入。 这样就防止被偷窥
c代码-C语言编写一个程序,将字符数组str2中的全部字符复制到字符数组str1中
c代码-C语言编写一个程序,将字符数组str2中的全部字符复制到字符数组str1中
Windows应用程序中的安全字符串处理
本文介绍了Strsafe,安全C运行时库(CRT)和安全STL函数。
关于vs2022系列与
strcpy
函数的使用方法。
文章目录 1.vs调试的基本步骤与基本使用方法。 2.Debug与Release的区别。 3.
strcpy
全称string
copy
-字符拷贝。
strcpy
函数的用法。 前言 在c语言的学习上每天都有知识需要记,博客就是我们的笔记本可以分享学习。 一、调试的基本步骤 1.发现程序错误的存在. 2.以隔离、消除等方式对错误进行定位. 3.确定错误产生的原因. 4提出纠正错误的解决办法. 5.对程序错误进行改正,重新测试. 二、vs系列的基本操作方式。 调试 F5
C语言
70,019
社区成员
243,267
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章