精华内容
下载资源
问答
  • strcat_s 和 strncat_s 使用

    千次阅读 2020-04-08 23:24:40
    由于原来的strcat和strncat可能会产生栈溢出 ...strcat_s:三个参数errno_t strcat_s(char * restrict dest,rsize_t destsz,const char * restrict src); 举例: char *a = "12345"; char *b =...

    由于原来的strcat和strncat可能会产生栈溢出

    所以新版的vs会提醒你换成更安全的函数strcat_s 和 strncat_s

    strcat_s:三个参数 errno_t strcat_s(char * restrict dest,rsize_t destsz,const char * restrict src);

    举例:

    char *a = "12345";

    char *b = (char*)malloc(6);

    memset(b, 0, 6);
    strcat_s(b, strlen(a) + 1, a);

    如果想连接部分就要用到下面这个:

    strncat_s :四个参数 errno_t strncat_s(char * restrict dest,rsize_t destsz,const char * restrict src,rsize_t count);

    count:最大复制数

    destsz:目标缓冲区大小。

    写在最后:提醒自己的是,很久没写c代码了,很多库函数都不记得怎么用了,突然被要求用纯c写代码,指针都忘了注意事项了。

    需要提醒的是,在用指针的时候,不要乱赋值!!!!!!!!,尤其赋值的东西后面还再用,可能就会篡改原值,所以最好先动态申请空间。

    展开全文
  • 主要介绍了关于vs strcpy_s()strcat_s()用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 使用strcat_s的注意事项

    万次阅读 多人点赞 2014-02-28 15:35:32
    我们要合并字符串的话,使用c语言编写... strcat_s函数声明: errno_t strcat_s( char *strDestination, size_t numberOfElements, const char *strSource ); 出现歧义的大部分为第2个参数。 1. L"Buffer is

        我们要合并字符串的话,使用c语言编写的时候需要注意几点事项。

        strcat_s函数声明:

    errno_t strcat_s(
       char *strDestination,
       size_t numberOfElements,
       const char *strSource 
    );


        出现歧义的大部分为第2个参数。

        1. L"Buffer is too small" && 0

    当此参数被赋值为下面几种情况下,会发生。

    (1)numberOfElements=sizeof(dst)

    strcat_s(ret, sizeof(ret), str1);

    (2)numberOfElements=strlen(src)

    strcat_s(ret, strlen(str1), str1);


    此错误提示我们目标(Buffer)过小。

    实际上第二个参数是合并字符串后的字符数量。

    即,源串大小 + 目标串大小 + 字符串结束符大小("\0")

           第(1)个错误只计算了目标串的大小.

           第(2)个错误只计算了源串的大小.

          2. L"String is not null terminated" && 0

              当我们没有初始化字符串的时候,就会出现。

    解决办法:

    memset(ret, 0, sizeof(ret));

        此程序在VS2015/VS2017(以及VS2008VS2010、VS2012、VS2013)调试pass.

    // ConsoleApplication1.cpp : Defines the entry point for the console application.
    //
    
    /// #include "stdafx.h" // 如果使用VS2008~VS2015创建的Console, 打开注释
    /// #include <tchar.h> // _tmain && _TCHAR // 如果使用VS2008~VS2013创建的Console, 打开注释
    #include <stdio.h>
    
    #include <stdlib.h> // malloc()
    #include <string.h> // strcat_s() && strlen()
    
    /// int _tmain(int argc, _TCHAR* argv[]) // 如果使用VS2008~VS2013创建的Console, 打开注释
    int main(int argc, char* argv[])
    {
    	char *ret = (char*)malloc(128);
    	memset(ret, 0, sizeof(ret));
    	char *str1 = "This is a demonstration program, ";
    	char *str2 = "considerations for using strcat_s.";
    
    	int len1 = strlen(str1) + 1;
    	strcat_s(ret, len1, str1);
    	//strcat_s(ret, sizeof(ret), str1);      // Debug Assertion Failed
    	//strcat_s(ret, strlen(str1), str1);     // Program: ...
                                                 // File: .\tcscat_s.inl
                                                 // Line: 42
                                                 // Expression: (L"Buffer is too small" && 0)      
        int len2 = strlen(ret) + strlen(str2) + 1;       
        strcat_s(ret, len2, str2);       
        printf("%s", ret);
    
        return 0;
    }
    

    参考文章:

        1. strcat_s ---  MSDN

    展开全文
  • strcat_s详解

    万次阅读 2015-08-27 19:51:39
    strcat_s是为了解决字符串拼接溢出在VS2005之后引进的更具安全性的函数。 strcat_s本身保留了两个变量strcat的特性,即可以使用两个参数的函数原型。如stract_s(str1,str2);将str2拼接到str1后。 strcat_s新增三个...

    strcat_s是为了解决字符串拼接溢出在VS2005之后引进的更具安全性的函数。

    strcat_s本身保留了两个变量strcat的特性,即可以使用两个参数的函数原型。如stract_s(str1,str2);将str2拼接到str1后。

    strcat_s新增三个参数的函数原型,如strcat_s(str1,sizeof(str1),str2)。超出范围会有断言。

    一下为特殊情况:

    1.当str1第一个字符为空时,strcat_s结果为str2;

    2.当str1中间有空字符时,strcat_s结果为str1第一个'\0'之前的字符拼接上str2.

    展开全文
  • strcat_sstrcat 的区别

    千次阅读 2019-11-07 16:49:16
    vs独特的特性, stract_s,strcpy_s,是VS2005及以后新增的具有更强"安全性"的CRT函数,取代了以前不带s的函数。 以strcat为例,前后的比较:...strcat_s:可以三个参数,strcat_s(s1,10,s2);也可以两个参数。 ...

    vs独特的特性,

    stract_s,strcpy_s,是VS2005及以后新增的具有更强"安全性"的CRT函数,取代了以前不带s的函数。

    以strcat为例,前后的比较:

    strcat:两个参数,第二个参数的字符串追加到后面可能会导致溢出。

    strcat_s:可以三个参数,strcat_s(s1,10,s2);也可以两个参数。

     

    展开全文
  • 先看下strcat()/strcat_s()函数调用报错: 放大一点 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C4996 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To ...
  • C字符串操作strcat/strcat_s详解

    万次阅读 多人点赞 2019-05-27 18:07:31
    strcat、strcpy、strcmp、strlen是C中针对字符串的库函数,这四个函数不安全,然后C针对这个情况整出strcat_s、strcpy_s、strncmp、strnlen_s(这个并不是替代stelen的)来弥补。而在C++中一般用string。 这篇文章...
  • strcpy_sstrcat_s的用法 char source[] = "Hello world !"; char destination[20] = {0}; strcpy_s(destination,sizeof(destination)/sizeof(destination[0]),source); 转载于:https://www.cnblog...
  • strcat_s(s[0], 4 * sizeof(name[0]), name[rand() % 20]); strcat_s(s[0], 4 * sizeof(name[0]), name[rand() % 20]); strcat_s(st[i].name[0], 4 * sizeof(name[0]), s[0]); printf("%s\n", st[i].name[0]); ...
  • strcat_s和strcpy_s的简单用法

    千次阅读 2019-07-28 17:08:59
    strcat_s和strcpy_s的用法 c++vs2017用到cstring库函数的时候老是出现这个错误 但能运行成功,网上查了半天没解决了,知道看到添加链接描述这位百度文库的文章”**试图得义“**大佬的讲解才明白点了。 strcpy_s定义 ...
  •  strcat_s:连接两个字符串 1.render 代码部分 #pragma once class lsfMain { public: void render(); bool hitPong(int x, int y, int sx, int sy, int sw, int sh); void WndProc(HWND hWnd, UINT...
  • strcpy_s(str,16,"hello");其中,里面的16,是16个字节,一定要大于输入的字符才不会报错。 strcat_s(str,8, name);里面的8,也是字节,也必须要大于字符串name,才不会报错。 ...
  • 调查报告:整理并用实验比较分析strncpy、strcpy_s、 strncpy_s、strlcpy、strncat、strcat_s、 strncat_s、 strlcat等函数的异同 包含在头文件 string .h 中。 Strncpy: 函数原型:char *strncpy( char *dest, ...
  • strcpy_s、sptintf_sstrcat_s的使用

    千次阅读 2015-11-19 12:12:42
    strcpy_s、sptintf_sstrcat_s是strcpy、sptintf与strcat的安全版本,均是通过指定缓冲区长度来避免存在的溢出风险。 strcpy_s 与strcpy strcpy_s和strcpy函数的功能几乎是一样的。strcpy函数,就象gets函数一样...
  • strncpy_sstrcat_s

    千次阅读 2015-01-04 11:29:38
    char* p_source = "tianzhaixing.bin"; unsigned int len = static_cast (strlen(p_source) - 4); char* p_name = (char*) malloc(len); strncpy_s(p_name, len+1, p_source, len);... strcat_s(p_name, len+5, ".t
  • strcpy_s()及strcat_s()的使用

    千次阅读 2019-09-30 16:37:51
    C语言中使用strcpy()来拷贝字符串,使用strcat()来连接字符串。其函数原型: char * strcpy ( char * destination, const char * source );...在C++中使用strcpy_s()和strcat_s(),其参数发生了变...
  • C++笔记 strcat_sstrcat的区别

    千次阅读 2016-12-02 19:08:45
    strcat_s在C/C++中,用于连接两个字符串的标准库函数,是strcat函数的增强版本。 需包含的预编译头文件 编辑 1、在C语言中:#include 2、在C++语言中:#include (可配合使用 using namespace ...
  • C++安全函数之strcat_s

    万次阅读 2016-09-16 09:31:44
    C++安全函数之strcat_s 1.必须包含的头文件: 2.函数申明: errno_t strcat_s( char *strDestination, size_t numberOfElements, const char *strSource );3.参数介绍 strDestination Null 终止的目标字符串...
  • errno_t strcat_s( char *strDestination, size_t numberOfElements, const char *strSource ); 2、函数功能 字符串拼接,追加 strSource 到 strDestination 3、参数介绍 strDestination:目标字符串缓冲区。 ...
  • 目录 一.strcat_s 函数简介 二.strcat_s 函数原理 三.strcat_s 函数实战 四.... 零基础 C/C++ 学习路线推荐...strcat_s 是系统的安全函数,微软在 2005 后建议用一系统所谓安全的函数,这中间就有 strcat_s 取代了 strca
  • 使用strcat_s函数的注意事项

    千次阅读 2018-12-15 15:14:18
    --------------------------------------------- -- 时间:2018-12-15 -- 创建人:Ruo_Xiao ...--------------------------------------------- ...一、strcat_s 1、原型: errno_t strcat_s( ...
  • 在运行 C++ Primer Exercise 3.40(使用C-Style Strings)会遇到报错。 1>E:\C++ Program\Exercise 3.40 - Alternative 1\3.40 - Alternative 1.cpp... Consider using strcat_s instead. To disable deprecation
  • C++string函数之strcat_s

    2015-05-04 15:12:00
    跟上一篇的strcpy_s一样,是新推出的较为安全的strcat函数 strcat_s脱胎于strcat,用于两个字符串的链接,strcat(str1,str2)直接返回新的str1. 但在vs2005后,为了安全起见,重新添加了些功能和api和以前不同。比如...
  • strcat_s使用问题

    2015-12-06 11:22:11
    errno_t strcat_s( char *strDestination, size_t numberOfElements, const char *strSource); 出现问题都是在第二个参数。第二个参数的大小是前后两个字符串的和再加1,1是结束符大小。 可以...
  • 用 <p>#include<stdio.h> <p>#include<string.h> <p>char str1[20]="one"...<p>strcat_s(str1,str2); <p>printf("%s\n",str1); 为何会显示str2未初始化?</p>
  • 我改成这样后,运行结果又出了问题,strcat_s(buffer, 100,areaNumber); 用的是VS2013 ``` #include #include void main() { char areaNumber[5]; char phoneNumber[12]; int input; char ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,491
精华内容 20,196
关键字:

strcat_s