strcpy 函数 一些细节问题

tianxiao1101 2010-09-14 01:29:15
我们都知道 strcpy(a,b) 是将字符串b 内存复制到 字符串 a;
因为字符串b 是以'/0'结尾,因此执行完函数后输出 a 没一点问题;
当这里的b 不是字符串时,而是一个 字符数组时,这事 b所占的内存中没有‘/0’结尾。
执行完函数后,输出a 就会有些问题,特别是 a 的字符串比 字符数组 b 长时。
我想问的是:::::a 内存中后面未被b覆盖的部分,怎么输出;
...全文
113 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmkkobe 2010-09-14
  • 打赏
  • 举报
回复
同意二楼。
wlj07057106 2010-09-14
  • 打赏
  • 举报
回复
楼主应该好好看下strcpy函数的定义是怎么样的
赵4老师 2010-09-14
  • 打赏
  • 举报
回复
上帖中
printf("%s,%d,%s\n",a,a[2];a+3);
应改为
printf("%s,%d,%s\n",a,a[2],a+3);
赵4老师 2010-09-14
  • 打赏
  • 举报
回复
char a[6]="abcde";
char b[3]="AB";
int i;
strcpy(a,b);
printf("%s,%d,%s\n",a,a[2];a+3);
//AB,0,de
xinhai9911 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 insanehui 的回复:]
引用 2 楼 justkk 的回复:
即使b是字符数组,strcpy(a, b)也是从b指定的地址开始拷贝,直到在内存中找到一个\0为止

正解,你使用strcpy函数时传递了一个字符数组给b本身就是不正确的用法。这样导致的情况就像二楼说的那样,你无法知道函数会把b后面的多少数据复制给了a...
所以,你问的所谓“a内存中未被b覆盖的部分怎么输出”是否显得没有意义?
[/Quote]
同意楼上观点!
insanehui 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 justkk 的回复:]
即使b是字符数组,strcpy(a, b)也是从b指定的地址开始拷贝,直到在内存中找到一个\0为止
[/Quote]
正解,你使用strcpy函数时传递了一个字符数组给b本身就是不正确的用法。这样导致的情况就像二楼说的那样,你无法知道函数会把b后面的多少数据复制给了a...
所以,你问的所谓“a内存中未被b覆盖的部分怎么输出”是否显得没有意义?
evoloyeu 2010-09-14
  • 打赏
  • 举报
回复
这样是会出现段错误的啊哈
justkk 2010-09-14
  • 打赏
  • 举报
回复
即使b是字符数组,strcpy(a, b)也是从b指定的地址开始拷贝,直到在内存中找到一个\0为止
onecl1 2010-09-14
  • 打赏
  • 举报
回复
a内是:a,b,c,d,e,f,\0
b内是:1,2,3,4,\0
拷贝完:1,2,3,4,\0,f,\0
输出到第一个\0结束

69,434

社区成员

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

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