社区
C++ 语言
帖子详情
strcpy 字符串结束问题
肥多罗
2008-10-20 11:08:23
void test()
{
char c_str[10];
char *p_str = "0123456789";
strcpy(c_str, p_str);
}
上面的编译怎么没出错?p_str不是还有个'\0'吗。。。。11个字符。。。。。c_str才10个字符。。。怎么没说数组越界?
thanks
...全文
180
8
打赏
收藏
strcpy 字符串结束问题
void test() { char c_str[10]; char *p_str = "0123456789"; strcpy(c_str, p_str); } 上面的编译怎么没出错?p_str不是还有个'\0'吗。。。。11个字符。。。。。c_str才10个字符。。。怎么没说数组越界? thanks
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
肥多罗
2008-10-21
打赏
举报
回复
哦。。5楼解释得不错。。谢啦。。
brookmill
2008-10-20
打赏
举报
回复
[Quote=引用 5 楼 wxflul 的回复:]
char *p_str = "0123456789";
改成01234567890; 程序运行没事。。。string[10] 也值(0)
改成012345678900; 弹出对话框 越界提示。。。
[/Quote]
看来编译器给c_str分配空间的时候,实际上给了12个字节,也就是4字节对齐。换一种说法,也可以说,给了10个字节,但紧接着的2个字节没分配给别人用。
01234567890共11个字符,加上'\0',正好用了这12个字节,没事
012345678900加上'\0'就是13个字节了,于是出错了
如果是gcc编译器,通常在c_str后面还会预留更多的空间。
cattycat
2008-10-20
打赏
举报
回复
4楼上说得对,这需要自己去注意的。
肥多罗
2008-10-20
打赏
举报
回复
char *p_str = "0123456789";
改成01234567890; 程序运行没事。。。string[10] 也值(0)
改成012345678900; 弹出对话框 越界提示。。。
brookmill
2008-10-20
打赏
举报
回复
数组越界的问题,在C/C++是完全靠程序员自己检查的。
不但编译器不管,运行的时候也不一定出错。
比如LZ的这个程序,我觉得多半就可以不出错的运行。虽然会写到c_str的外边一个字节,很多时候这个字节刚好是没人用的
做项目最怕这种问题,调试的时候没事,给了客户就出毛病,还不好复现,很麻烦。
chlaws
2008-10-20
打赏
举报
回复
strcpy安全性本来不高,你要高安全性就用strncpy
AlwaysSLH
2008-10-20
打赏
举报
回复
编译器没有责任去检测数组越界
brookmill
2008-10-20
打赏
举报
回复
编译器不检查数组越界
当
字符串
不以NUL
结束
时,
strcpy
的
问题
strlcpy and strlcat
关于
strcpy
函数用法存在一个错误
前期疑问:未完待续。
VB开发VB-DLL-Link.DLL (1.1.0.6, 无过期跳转,可长期使用)
原文件作者停止维护,跳转网址无效,无法使用,本版无过期跳转,可长期使用。 内容概要:本文介绍了如何通过VB_DLL_Link工具,使VB6能够生成可输出函数的通用DLL文件,突破其原本仅支持ActiveX DLL的限制。详细讲解了VB_DLL_Link的安装方法(自动或手动替换VB6目录下的Link.exe)、创建DLL的步骤(包括编写必要的DLLMain入口函数、添加自定义函数、使用标准模块等),以及如何通过Declare语句在VB中调用生成的DLL函数,并强调了
字符串
参数需转换为Unicode格式的关键细节。; 适合人群:熟悉VB6编程、有一定开发经验的程序员或对DLL开发感兴趣的VB爱好者;尤其适用于希望在VB环境中实现通用DLL功能但缺乏C/C++背景的开发者。
功率分配注水算法-下载即用.zip
代码转载自:https://pan.quark.cn/s/e25b8d483949 一种运用注水技术进行功率配置的方案,能够将更多能量施加于性能欠佳的子信道,同时将较少能量施加于性能优良的子信道,借此途径可以改善系统的误码率表现。
华为上网卡驱动-下载即用.zip
源码直接下载地址: https://pan.quark.cn/s/1c143f32ee83 华为作为全球领先的通信设备供应商,其产品系列广泛涉及各类网络设备,其中包括我们接下来要探讨的上网卡产品。华为上网卡驱动程序是一种专门为华为品牌旗下多种型号上网卡开发的软件模块,其主要功能在于保障这些设备与计算机操作系统的无缝对接。涉及的型号涵盖EC8189、EC226、EC169C、EC360、EC1260、EC1261、EC189、EC122、EC150以及EC168,这些均是由华为公司推出的移动宽带调制解调器,旨在通过移动网络实现便捷的互联网接入服务。驱动程序在计算机系统中的地位举足轻重,它充当了硬件设备与操作系统之间的媒介,负责对硬件设备发出的指令进行解读和执行,并将操作系统的指令传递给硬件设备。华为上网卡驱动程序的及时更新和精准安装是保障设备稳定运作和性能达到最优的关键因素。"天翼宽带安装程序V1.3.3.exe"是由中国电信提供的一个整合性软件包,内含华为上网卡的驱动程序及配套的管理工具。用户可借助此安装程序来执行华为上网卡的相关驱动安装及更新,同步享受中国电信的3G或4G网络服务。版本标识V1.3.3代表软件经过迭代优化,通常包含了对错误的修正、性能的改善以及新功能的引入。 "SetupInfo.xml"作为安装程序的配置文档,其中收录了安装流程中的各项设定和元数据信息,例如安装流程、文件定位、依赖条件等。它是安装程序在执行时参照和遵循的纲领,旨在确保安装流程按既定方案进行。文件名"CT_HW_EVDO_Driver"或许指向华为的EVDO(Evolution-Data Optimized)驱动程序,EVDO是一种3G无线通信规范,具备高速数据传输的特性。该驱动可...
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章