strcpy简单应用以及知识点延伸

文章讨论了C++中strcpy函数用于字符串复制的特点,指出其在复制过程中未检查目标数组大小可能导致的安全问题。同时提到了cout函数如何输出字符串至终端,并注意到它以字符作为结束标志。文章还提醒在VS中应使用更安全的strcpy_s替代strcpy,并建议在复制前清零目标数组。此外,介绍了memcpy与memset在内存操作中的作用。
摘要由CSDN通过智能技术生成
strcpy函数和cout函数的理解
代码:
void main
{
    char CVisa32_ErrorMsg[100]={0};
    strcpy(CVisa32_ErrorMsg,"Error: open instrs fail!exiting!");
    cout<<CVisa32_ErrorMsg<<endl;
    strcpy(CVisa32_ErrorMsg,"Error: close!exiting!");
    cout<<CVisa32_ErrorMsg<<endl;
    cout << CVisa32_ErrorMsg[25] << endl;
}
输出:
Error: open instrs fail!exiting!
Error: close!exiting!
x
问题:
结果"Error: close!exiting!"中为啥没有"il!exiting!"?
原因分析:
1.先看strcpy原型:char * __cdecl strcpy(char * __restrict__ _Dest,const char * __restrict__ _Source);
函数作用:把含有'\0'结束符的字符串常量复制到另一个字符数组空间,返回值的类型为char*,即Dest字符数组的首地址。
2.而cout输出字符串是以'\0'字符结束的,即只打印出'\0'字符以前的字符串,因此就是上面的输出结果了
vs中不能使用strcpy,只能用strcpy_s替换;而qt中可以使用strcpy
个人建议:我觉得还是要在复制前清零Dest好些!
知识点扩展:
1.可以使用memcpy(),该函数支持复制不同数据类型数组的操作,strcpy只能复制字符串
2.和memcpy()结合使用的是memset(),该函数是初始化缓存的作用,可将该缓存所有空间设置成某个指定的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值