C语言中strcpy()的问题?

查看:269
本文介绍了C语言中strcpy()的问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

刚接触C语言,代码和执行结果如图。
疑问:
1.b 定义的长度是3,为什么可以放"helloworld"这样长度大于3的字符串?
2.为什么a会少了前面3个字符?

解决方案

在内存中两个数组的内存分配应该是这样的:
'?' '?' '?' 'h' 'e' 'l' 'l' 'o' 'w' 'o' 'r' 'l' 'd' '\0' (数组b没有初始化所以内容是不确定的)
strcpy不知道这个字符数组a有多长,只知道一段字符串遇到'\0'就算结束,于是把a全部复制到b了:
'h' 'e' 'l' 'l' 'o' 'w' 'o' 'r' 'l' 'd' '\0' 'l' 'd' '\0'

c语言有个观点(哲学?):程序员知道自己正在做什么。于是c中有些地方就没有做安全性检查了。然而后来发现,许多程序员并不清楚自己在做什么,于是就有了strcpy_s。

补充下,两个数组的位置是由编译器决定的。比如我用gcc编译的结果是,a、b数组都为helloworld。

这篇关于C语言中strcpy()的问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆