zoukankan      html  css  js  c++  java
  • MFC---关于string.h相关函数

    1.在VS2005中使用strcpy、strcat、sprintf出现如:mfc中'strcpy' was declared deprecated警告

    这是因为VS2005中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。这些函数如:strcpy、strcat等。    对于这些问题,VC2005建议使用这些函数的更高级的安全版本,即在这些函数名后面加了一个_s的函数。这些安全版本函数使用起来更有效,也便于识别,如:strcpy_s,calloc_s等。    当然,如果执意使用老版本、非安全版本函数,可以使用_CRT_SECURE_NO_DEPRECATE标记来忽略这些警告问题。办法是在编译选项 C/C++ | Preprocessor | Preprocessor Definitions中,增加_CRT_SECURE_NO_DEPRECATE标记即可

    正如我所提到的,另外一个接受安全检查的常用函数strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为,正如我所提到的,为了安全需要避免这些不可预料的行为,这有一个使用安全的strcpy_s函数的例子。
      
      char source[] = "Hello world!";
      char destination[20] = { 0 };
      strcpy_s(destination, sizeof (destination) / sizeof (destination[0]), source);
      
      有很多原因来喜欢这个新的strcpy_s函数。最明显的区别是的额外的、以字节为单位的参数,它用来确认缓冲区大小。这允许strcpy_s函数可以进行运行时检查,以确定写入的字符没有超过目标缓冲区的边界。还有一些其它的检查方法来确定参数的有效性。在调试版本中这些检测方法,包括显示调试报告的"断言"(assertions)方法,如果它们的条件没有满足,它们将显示调试报告。无论是调试还是发行版本,如果一个特定的条件没有得到满足,一个无效的参数管理器将被调用,它默认的行为是抛出一个访问冲突来终止应用程序。这非常好的实现了让你的应用程序持续运行,而不会产生不可预期的结果。当然,这种情况完全可以通过确保类似于strcpy_s的函数不调用无效参数来避免。
      
      前一个例子可以通过新的_countof宏来进一步简化,这个宏移抛开了对有错误倾向的sizeof操作符的需要。_countof宏返回C类型数组的元素数量。这个宏本身对应了一个模版,如果传递一个原始指针的话,它将无法通过编译。这有一个例子:
      
      strcpy_s(destination, _countof(destination), source);

    一共不是三个参数,strcpy_s(a,sizeof(a),b)  其中sizeof(a)表示目的指针能够接受到的最大的字符的个数,

     2. warning C4996: '_itoa' was declared deprecated

    将_itoa(DispNum+1, s, 10);替换为_itoa_s(DispNum+1, s, 10,10);
    
    参考(http://zhidao.baidu.com/question/475097271.html?qbl=relate_question_4&word=%27_itoa%27)
    errno_t _itoa_s(
    int value, char *buffer, size_t sizeInCharacters, int radix ); 少了一个参数 radix 进制 改成 _itoa_s (DispNum+1,s,10,10); //10进制显示 支持2-36 进制

     3.将CString类型转换成字符数组类型

    CString str="hello"; 
    char ch[20]; 
    memset(ch,0,20);
    memcpy(ch,str,str.GetLength()); 
    

     4. CString 和int相互转化

    CString str = _T("123");
    
    int i = _ttoi(str);
    
    ===============
    
    int i = 123;
    
    CString str ;
    
    str.Format(_T("%d"), i);
    

      

     

  • 相关阅读:
    JAVA多线程之守护线程
    有符号数与无符号数
    子母钟系统,GPS时钟系统,医院网络时间同步技术方案
    NTP时间同步服务器,GPS时钟系统,北斗授时产品,京准科技
    卫星时钟系统(NTP网络时钟系统)技术应用方案
    GPS对时产品,NTP校时,时间同步服务器,北斗授时设备
    GPS对时装置(NTP时钟服务器)应用安防监控系统
    考场时钟系统(标准化考场时钟同步建设)应用方案
    时间同步装置(GPS时钟)在电网SCADA系统应用
    网络时间服务器(医院时钟系统)相关问题汇总
  • 原文地址:https://www.cnblogs.com/zhangerxiaoma/p/5057406.html
Copyright © 2011-2022 走看看