C语言中strcpy()的问题?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

C语言中strcpy()的问题?

杨冬芳 2016-05-30 18:12:33 1191

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

C语言
分享到
取消 提交回答
全部回答(5)
  • 游客x4uu57rrcwjuo
    2020-03-19 10:51:19

    内存越界了,默认会拷贝所有的字符串

    0 0
  • 一生有你llx
    2019-07-17 19:20:54

    内存越界了,默认会拷贝所有的字符串

    0 0
  • nothingfinal
    2019-07-17 19:20:54

    内存越界,使用strcpy_s会提示错误信息

    0 0
  • xumaojun
    2019-07-17 19:20:54

    内存越界,使用安全函数strcpy_s会提示错误信息

    0 0
  • 杨冬芳
    2019-07-17 19:20:54

    在内存中两个数组的内存分配应该是这样的:
    '?' '?' '?' '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。

    0 0
添加回答

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题