开发者社区> 问答> 正文

C语言中strcpy()的问题?

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

展开
收起
杨冬芳 2016-05-30 18:12:33 3107 0
5 条回答
写回答
取消 提交回答
  • 内存越界了,默认会拷贝所有的字符串

    2020-03-19 10:51:19
    赞同 展开评论 打赏
  • 专注物联网

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

    2019-07-17 19:20:54
    赞同 展开评论 打赏
  • 软件开发,安全加密

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

    2019-07-17 19:20:54
    赞同 展开评论 打赏
  • 乐于学习与分析

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

    2019-07-17 19:20:54
    赞同 展开评论 打赏
  • IT从业

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

    2019-07-17 19:20:54
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载